<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
    <title>进程</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            overflow: visible;
            display: block;
            margin:5px auto;
            margin-bottom: 5px;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="content-info">
          <div id="title">进程</div>
        </div>
        <div id="author-info">
          <div id="author-name" class="text">inicho</div>
          <div id="share-time" class="text">2021-04-11</div>
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg ed:vSpacing="30" preserveAspectRadio="xMinYMin meet" xmlns:ev="http://www.w3.org/2001/xml-events" ed:hSpacing="30" xmlns="http://www.w3.org/2000/svg" width="2321" id="page0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ed="https://www.edrawsoft.cn/xml/2017/SVGExtensions/" viewBox="0 0 2321 2573" height="2573" ed:name="页面-1">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st17 {fill:#303030;font-family:微软雅黑;font-size:14pt}
.st15 {fill:#454545;font-family:微软雅黑;font-size:10pt;font-weight:bold}
.st14 {fill:#454545;font-family:微软雅黑;font-size:10pt}
.st18 {fill:#454545}
.st16 {fill:#4d5386;font-family:微软雅黑;font-size:14pt;font-weight:bold}
.st12 {fill:#c00000;font-family:微软雅黑;font-size:10pt;font-weight:bold}
.st13 {fill:#c00000;font-family:微软雅黑;font-size:10pt}
.st21 {fill:#c00000;font-weight:bold}
.st19 {fill:#c00000}
.st20 {font-weight:bold}
.st22 {font-weight:normal}
]]></style>
    <defs/>
    <rect x="0" y="0" width="2321" height="2573" fill="#e9f5f4"/>
    <path stroke-opacity="0.5" fill-opacity="0.5" id="water2" stroke="#d0ebe7" d="M136.2,2407.7L119.5,2390.9L102,2233.8C100.7,2222.6,100.1,2212.5,99.9,2203.5L23.9,2279.5L7.8,2263.4L105.4,2165.8L121.5,2181.9L139.6,2353L140.9,2370.9L227.9,2283.8L244,2299.9L136.2,2407.7M217.3,2053.9L235.3,2035.9L314.1,2114.7C327.8,2128.4,337.1,2140.8,342.1,2152C347.1,2163.1,348,2175.3,345,2188.4C341.9,2201.6,333.8,2214.7,320.7,2227.8C307.9,2240.6,295.3,2248.9,282.8,2252.6C270.2,2256.3,258.1,2255.7,246.2,2250.9C234.4,2246,221.3,2236.3,206.9,2221.9L128.1,2143.1L146.1,2125.1L224.8,2203.8C236.7,2215.6,246.5,2223.2,254.3,2226.6C262.1,2230,270.2,2230.6,278.6,2228.3C287,2225.9,295.1,2220.9,302.8,2213.2C316.1,2199.9,322.6,2187.4,322.2,2175.8C321.8,2164.1,313.1,2149.7,296,2132.6L217.3,2053.9M463,2080.9L450.5,2068.4C454.1,2084.5,449.8,2098.6,437.6,2110.8C429.7,2118.6,420.3,2123.7,409.4,2126C398.4,2128.2,387.3,2127.3,375.9,2123.1C364.4,2119,353.7,2111.8,343.6,2101.7C333.7,2091.9,326.4,2081.3,321.7,2070C316.9,2058.7,315.7,2047.6,318,2036.7C320.3,2025.9,325.5,2016.4,333.6,2008.3C339.6,2002.3,346.1,1998.3,353.3,1996.1C360.5,1994,367.5,1993.5,374.5,1994.6L325.5,1945.7L342.2,1929L478.5,2065.4L463,2080.9M360.8,2084.5C373.4,2097.2,385.6,2104,397.1,2104.9C408.7,2105.8,418.2,2102.7,425.4,2095.4C432.7,2088.1,436,2078.9,435.1,2067.8C434.2,2056.7,427.7,2045,415.4,2032.7C401.9,2019.2,389.3,2011.9,377.8,2010.8C366.3,2009.7,356.7,2012.9,349.1,2020.5C341.6,2028,338.4,2037.2,339.5,2048.3C340.6,2059.4,347.7,2071.4,360.8,2084.5M467.9,2017L481.8,1997.9C489.4,2003.6,497.1,2006.1,504.9,2005.4C512.6,2004.7,520.3,2000.5,528,1992.9C535.7,1985.2,539.8,1977.9,540.4,1971C541,1964.2,539.2,1958.7,535,1954.4C531.2,1950.7,526.5,1949.3,521.1,1950.4C517.3,1951.3,509.7,1955.1,498.3,1961.9C482.9,1971.1,471.7,1976.9,464.7,1979.4C457.7,1981.9,451,1982.3,444.6,1980.8C438.1,1979.2,432.5,1976,427.6,1971.2C423.2,1966.8,420.2,1961.7,418.4,1955.9C416.7,1950.2,416.3,1944.3,417.3,1938.4C418,1933.8,419.9,1928.7,423.1,1922.8C426.2,1917,430.4,1911.5,435.5,1906.4C443.3,1898.6,451.2,1892.9,459.3,1889.3C467.4,1885.7,474.7,1884.4,481.3,1885.4C487.9,1886.4,495,1889.6,502.4,1894.9L488.3,1913.5C482.4,1909.2,476.3,1907.4,469.9,1908.1C463.5,1908.8,457,1912.4,450.5,1918.9C442.8,1926.6,438.6,1933.4,437.9,1939.2C437.1,1945,438.4,1949.6,441.9,1953.1C444,1955.2,446.7,1956.5,449.8,1956.9C452.9,1957.3,456.5,1956.6,460.6,1954.9C462.9,1953.9,469.3,1950.4,479.7,1944.4C494.7,1935.7,505.6,1930,512.3,1927.4C519,1924.7,525.6,1924,532.1,1925.1C538.6,1926.3,544.7,1929.8,550.4,1935.5C556,1941.1,559.6,1947.9,561.3,1956.1C562.9,1964.3,562.1,1972.8,558.6,1981.7C555.2,1990.5,549.6,1998.8,541.8,2006.5C529,2019.4,516.6,2026.5,504.5,2027.9C492.4,2029.3,480.2,2025.7,467.9,2017M651.6,1868C650.6,1879.4,648.4,1889.1,644.8,1897C641.3,1904.9,636.2,1912.2,629.6,1918.7C618.8,1929.6,607.8,1935.3,596.7,1935.8C585.5,1936.3,575.8,1932.5,567.6,1924.2C562.8,1919.4,559.4,1913.9,557.6,1907.7C555.8,1901.5,555.5,1895.4,556.7,1889.4C557.8,1883.4,560,1877.6,563.2,1871.9C565.6,1867.7,569.8,1861.9,575.6,1854.5C587.5,1839.3,595.5,1827.5,599.7,1818.8C597.5,1816.5,596,1815,595.4,1814.4C588.6,1807.6,582.2,1804.3,576.2,1804.7C568.2,1805.2,559.9,1809.7,551.5,1818.1C543.6,1826,539.2,1833.2,538.2,1839.7C537.2,1846.2,539.3,1853.8,544.5,1862.7L525.9,1876.8C520.4,1868.3,517.2,1860.2,516.3,1852.5C515.4,1844.7,517,1836.5,521.1,1827.7C525.3,1819,531.6,1810.3,540.1,1801.8C548.5,1793.4,556.3,1787.5,563.6,1784.2C570.9,1781,577.2,1779.6,582.7,1780.1C588.2,1780.6,593.7,1782.7,599.3,1786.3C602.7,1788.6,608.1,1793.5,615.6,1800.9L637.9,1823.2C653.5,1838.8,663.7,1848.3,668.5,1851.7C673.3,1855.1,678.7,1857.6,684.6,1859.3L667.1,1876.8C661.9,1875.1,656.7,1872.1,651.6,1868M612.8,1832C609.2,1840.5,602.2,1851.7,591.8,1865.6C585.9,1873.5,582.1,1879.5,580.5,1883.6C578.9,1887.7,578.5,1891.7,579.4,1895.6C580.2,1899.6,582.1,1903,585,1905.9C589.5,1910.4,594.9,1912.4,601.2,1912C607.6,1911.6,614,1908.1,620.5,1901.6C627,1895.2,631.3,1888,633.5,1880.2C635.7,1872.3,635.5,1864.8,633,1857.5C631,1852,626.3,1845.5,618.9,1838.1L612.8,1832M716.9,1720L700.9,1704L758.6,1646.2L809.2,1696.8C807.4,1712.7,803.6,1727.2,797.7,1740.1C791.8,1753.1,784,1764.6,774,1774.5C760.6,1787.9,745.6,1797.2,728.9,1802.4C712.2,1807.6,695.7,1807.6,679.3,1802.3C662.8,1797.1,647.9,1787.7,634.5,1774.3C621.3,1761.1,611.6,1745.9,605.7,1728.8C599.7,1711.8,599.2,1695.3,604,1679.3C608.9,1663.3,618.1,1648.5,631.6,1634.9C641.5,1625.1,652,1617.7,663.2,1613C674.3,1608.2,685,1606.4,695.3,1607.6C705.5,1608.7,716.4,1612.7,727.9,1619.6L716.1,1640.3C707.1,1635.4,699.1,1632.5,692.1,1631.6C685.1,1630.6,677.6,1631.8,669.5,1635.1C661.5,1638.3,654.1,1643.4,647.2,1650.3C638.9,1658.5,633.1,1666.9,629.6,1675.4C626,1683.9,624.5,1692.1,624.9,1699.9C625.3,1707.7,626.9,1715,629.8,1722C634.7,1733.9,642.2,1744.8,652,1754.6C664.2,1766.8,676.4,1774.8,688.8,1778.8C701.2,1782.8,713.3,1782.8,725.3,1778.8C737.3,1774.8,747.7,1768.3,756.7,1759.3C764.5,1751.4,770.7,1742.3,775.1,1731.9C779.5,1721.4,782,1712.6,782.4,1705.3L757,1679.9L716.9,1720M858.5,1685.4L722.1,1549.1L740.2,1531L876.5,1667.4L858.5,1685.4M944.1,1675.8L926.6,1662C931.2,1659.3,934.9,1656.6,937.6,1653.9C941.4,1650.2,943.7,1646.6,944.7,1643.1C945.7,1639.6,945.8,1636.1,945,1632.4C944.4,1629.7,941.9,1623.8,937.6,1614.8C937,1613.6,936.1,1611.7,935,1609.2L798.6,1547.8L816.6,1529.7L894.4,1566.4C904.3,1571,914.3,1576.2,924.4,1582.1C918.7,1572.5,913.4,1562.7,908.8,1552.7L872.3,1474L889.1,1457.3L952,1595.3C958.8,1610.2,963.1,1620.8,965,1627.1C967.5,1635.6,968.2,1643.1,966.9,1649.5C965.6,1655.9,962.3,1661.8,957,1667.1C953.8,1670.3,949.5,1673.2,944.1,1675.8M1052.4,1467.2C1051.4,1478.6,1049.2,1488.3,1045.6,1496.2C1042.1,1504.1,1037,1511.4,1030.4,1517.9C1019.6,1528.8,1008.6,1534.5,997.4,1535C986.3,1535.5,976.6,1531.7,968.4,1523.4C963.5,1518.6,960.2,1513.1,958.4,1506.9C956.6,1500.7,956.3,1494.6,957.5,1488.6C958.6,1482.6,960.8,1476.8,964,1471.1C966.4,1466.9,970.6,1461.1,976.4,1453.7C988.3,1438.5,996.3,1426.7,1000.5,1418.1C998.2,1415.7,996.8,1414.2,996.2,1413.6C989.4,1406.8,983,1403.5,977,1403.9C969,1404.4,960.7,1408.9,952.3,1417.3C944.4,1425.2,940,1432.4,939,1438.9C938,1445.4,940.1,1453.1,945.3,1461.9L926.7,1476C921.2,1467.5,918,1459.4,917.1,1451.7C916.2,1444,917.8,1435.7,921.9,1426.9C926.1,1418.2,932.4,1409.5,940.9,1401C949.3,1392.6,957.1,1386.7,964.4,1383.5C971.6,1380.2,978,1378.8,983.5,1379.3C989,1379.8,994.5,1381.9,1000.1,1385.5C1003.5,1387.8,1008.9,1392.7,1016.4,1400.1L1038.7,1422.4C1054.3,1438,1064.5,1447.5,1069.3,1450.9C1074.1,1454.3,1079.5,1456.8,1085.4,1458.5L1067.9,1476C1062.7,1474.3,1057.5,1471.3,1052.4,1467.2M1013.6,1431.2C1010,1439.7,1003,1451,992.6,1464.8C986.7,1472.7,982.9,1478.7,981.3,1482.8C979.7,1486.9,979.3,1490.9,980.1,1494.8C981,1498.8,982.9,1502.2,985.8,1505.1C990.2,1509.6,995.6,1511.6,1002,1511.2C1008.4,1510.8,1014.8,1507.3,1021.3,1500.8C1027.8,1494.4,1032.1,1487.2,1034.3,1479.4C1036.5,1471.6,1036.3,1464,1033.8,1456.7C1031.8,1451.2,1027.1,1444.7,1019.7,1437.3L1013.6,1431.2M1108,1435.9L971.6,1299.6L989.7,1281.6L1045.6,1337.5L1116.5,1266.7L1060.5,1210.7L1078.6,1192.6L1214.9,1329L1196.9,1347L1132.6,1282.8L1061.7,1353.6L1126,1417.9L1108,1435.9M1233.4,1310.5L1216.7,1293.7L1199.2,1136.6C1197.9,1125.4,1197.3,1115.3,1197.1,1106.2L1121.1,1182.3L1105,1166.2L1202.6,1068.6L1218.7,1084.7L1236.8,1255.8L1238.1,1273.7L1325.1,1186.6L1341.2,1202.7L1233.4,1310.5M1242.2,1067.5L1223,1048.2L1239.7,1031.5L1259,1050.8L1242.2,1067.5M1359.3,1184.6L1260.5,1085.8L1277.3,1069.1L1376.1,1167.8L1359.3,1184.6M1416.3,1127.6L1400.8,1143.1L1264.4,1006.8L1281.2,990L1329.8,1038.7C1328,1022.7,1332.6,1009.3,1343.6,998.3C1349.7,992.2,1356.6,987.7,1364.5,984.7C1372.4,981.7,1380.3,980.7,1388.2,981.6C1396.2,982.6,1404.3,985.2,1412.5,989.5C1420.8,993.7,1428.4,999.4,1435.6,1006.6C1452.5,1023.5,1461.4,1040.8,1462.3,1058.4C1463.1,1076,1457.7,1090.7,1446,1102.4C1434.3,1114,1420.3,1118.3,1404,1115.2L1416.3,1127.6M1366,1077.6C1377.9,1089.5,1388,1096.4,1396.5,1098.5C1410.4,1101.8,1421.8,1099,1430.8,1090C1438.1,1082.7,1441.3,1073.2,1440.3,1061.5C1439.3,1049.8,1432.4,1037.7,1419.9,1025.1C1407,1012.2,1394.9,1005.2,1383.6,1004.2C1372.4,1003.2,1363.1,1006.3,1355.9,1013.5C1348.6,1020.9,1345.4,1030.4,1346.4,1042.1C1347.5,1053.7,1354,1065.6,1366,1077.6M1532,1011.9L1359.5,911.7L1378,893.2L1488.1,961.9C1499.7,969,1510.9,976.4,1521.8,984C1510.7,966,1504.3,955.5,1502.7,952.7L1436.6,834.6L1458.3,812.9L1546.9,862.4C1568.9,874.6,1588.5,887.1,1605.7,900C1598.9,889.7,1591.2,877.5,1582.9,863.6L1516.6,754.6L1534.8,736.4L1633.7,910.2L1616.3,927.6L1483.7,852.4C1472.6,846.1,1465.9,842.2,1463.4,840.7C1468.3,848.4,1472.3,855,1475.4,860.7L1550.4,993.5L1532,1011.9M1696.1,847.8L1559.8,711.4L1586.9,684.3L1715.7,748.5C1727.7,754.6,1736.6,759.1,1742.4,762.2C1739,755.7,1734.2,746,1727.8,733.1L1665.6,605.6L1689.9,581.3L1826.2,717.7L1808.8,735.1L1694.7,620.9L1769.2,774.7L1752.9,791L1597.4,714.3L1713.5,830.4L1696.1,847.8M1850.9,693L1714.6,556.6L1731.3,539.9L1867.6,676.3L1850.9,693M1894.5,649.4L1758.2,513L1785.3,485.9L1914.1,550.1C1926.1,556.2,1935,560.7,1940.8,563.8C1937.4,557.3,1932.6,547.6,1926.2,534.7L1864,407.2L1888.3,382.9L2024.6,519.3L2007.2,536.7L1893.1,422.5L1967.6,576.3L1951.3,592.5L1795.8,515.9L1911.9,632L1894.5,649.4M1977.8,431.6C1961.7,415.5,1950.4,400.9,1943.8,387.7C1937.3,374.6,1934.7,362.1,1935.9,350.2C1937.1,338.3,1942.7,327.4,1952.6,317.5C1959.9,310.2,1967.8,305.2,1976.3,302.7C1984.7,300.1,1993.5,299.8,2002.7,301.7C2011.8,303.7,2021.4,307.6,2031.4,313.6C2041.4,319.5,2053.2,329.2,2066.7,342.7C2082.7,358.7,2094,373.3,2100.5,386.4C2107.1,399.5,2109.7,412,2108.6,423.9C2107.4,435.8,2101.8,446.7,2091.8,456.7C2078.7,469.9,2063.6,475.5,2046.7,473.6C2026.4,471.2,2003.4,457.2,1977.8,431.6M1995,414.4C2017.4,436.8,2034.9,449.1,2047.5,451.2C2060.2,453.4,2070.4,450.7,2078.1,443C2085.7,435.3,2088.5,425.1,2086.3,412.4C2084.1,399.7,2071.8,382.2,2049.5,359.9C2027.1,337.5,2009.5,325.2,1996.9,323C1984.3,320.9,1974.1,323.7,1966.3,331.5C1958.6,339.2,1955.7,348.6,1957.6,359.7C1960.2,373.8,1972.6,392,1995,414.4M2245.7,269C2259.8,266.4,2271.8,262.9,2281.5,258.5L2288.8,276.3C2275.4,282.6,2260.1,286.8,2242.7,288.9C2238.3,304.6,2229.9,318.6,2217.7,330.8C2205.4,343.2,2191.2,351.4,2175.2,355.5C2159.2,359.6,2143.1,358.9,2126.9,353.6C2110.7,348.2,2095.8,338.8,2082.3,325.3C2068.8,311.8,2059.3,296.8,2053.7,280.3C2048.2,263.8,2047.5,247.7,2051.8,231.8C2056.1,216,2064.5,201.8,2077,189.4C2089.6,176.8,2103.9,168.4,2120,164.3C2136.1,160.2,2152.2,160.9,2168.2,166.3C2184.3,171.8,2199.1,181.3,2212.6,194.8C2223.8,206,2232.2,217.8,2237.8,230.2C2243.3,242.5,2246,255.5,2245.7,269M2182.9,285.6C2196.3,278.1,2209.2,273.9,2221.7,272.9C2222.6,252.6,2213.4,232.8,2194,213.4C2183,202.3,2171.4,194.6,2159.4,190.1C2147.4,185.6,2135.6,184.7,2123.8,187.3C2112,190,2101.6,195.8,2092.6,204.8C2079.2,218.3,2072.6,234,2073,252.1C2073.3,270.2,2082.6,288.4,2100.9,306.7C2118.6,324.4,2136.6,333.6,2154.9,334.3C2173.1,335,2189.1,328.6,2202.7,314.9C2209.2,308.5,2214.1,301.2,2217.3,293.1C2208,295.1,2199.5,298.4,2191.7,303.1L2182.9,285.6" fill="#d0ebe7"/>
    <path stroke="#f8ae1a" id="516" transform="matrix(1,0,0,1,2212,473.59)" d="M0.1,0C6,0,5.9,17.4,5.9,17.4L5.9,122.5C5.9,122.5,6.9,137.4,12,137.4C6.9,138,5.9,152.2,5.9,152.2L5.9,257.4C5.9,257.4,5.8,274.8,0,274.8" stroke-linejoin="round" ed:type="summary" fill="none" ed:idlist="112,158,114,166,168,116,170,172,118,176,184,120,174,122,128,124,130,195" ed:parentid="112,122,124"/>
    <path stroke="#f8ae1a" id="194" transform="matrix(1,0,0,1,2028,692.34)" d="M0.1,0C6,0,5.9,3.5,5.9,3.5L5.9,25C5.9,25,6.9,28,12,28C6.9,28.1,5.9,31,5.9,31L5.9,52.5C5.9,52.5,5.8,56,0,56" stroke-linejoin="round" ed:type="summary" fill="none" ed:idlist="122,128,124,130" ed:parentid="122,124"/>
    <path fill-opacity="0.2" stroke="#92a7ff" id="246" transform="matrix(1,0,0,1,1607,1115.59)" d="M8,0L267,0C272.4,0,275,2.6,275,8L275,93.2C275,98.6,272.4,101.3,267,101.3L8,101.3C2.6,101.3,0,98.6,0,93.3L0,8C0,2.6,2.6,0,8,0z" stroke-linejoin="round" ed:type="boundary" fill="#f5f6ff" ed:idlist="208,224,216,236,218,238" ed:parentid="208,216,218"/>
    <path stroke="#f8ae1a" id="282" transform="matrix(1,0,0,1,508,531.68)" d="M11.9,0C6,0,6.1,15.3,6.1,15.3L6.1,108C6.1,108,5.1,121.1,0,121.1C5.1,121.7,6.1,134.2,6.1,134.2L6.1,226.9C6.1,226.9,6.2,242.2,12,242.2" stroke-linejoin="round" ed:type="summary" fill="none" ed:idlist="266,268,284,286,312,314,316,318,329,330" ed:parentid="266,268"/>
    <g id="600" transform="matrix(1,0,0,1,812.4,2018.06)" ed:toid="670" ed:type="relation" ed:fromid="684">
        <path d="M64.2,65.8C59.1,19.2,-233.9,40.1,-64.2,-65.8" fill="none"/>
        <path stroke="#ffc000" d="M64.2,65.8C59.1,19.7,-228.1,39.7,-69.2,-62.6" stroke-linejoin="round" stroke-linecap="round" fill="none"/>
        <path stroke="#ffc000" d="M-64.2,-65.8L-72.2,-65.4C-71,-64.8,-70,-63.8,-69.2,-62.6C-68.4,-61.4,-68,-60,-67.9,-58.7L-64.2,-65.8" stroke-width="1" stroke-linecap="round" fill="#ffc000"/>
    </g>
    <path stroke="#696969" id="103" transform="matrix(1,0,0,1,1427.5,830.59)" d="M-60.4,412.1C-58,-109.4,-10.2,-454.1,60.5,-454.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="102"/>
    <path stroke="#696969" id="105" transform="matrix(1,0,0,1,1427.5,1078.28)" d="M-60,164.4C-54.8,-59.8,-7.9,-206.4,60.5,-206.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="104"/>
    <path stroke="#696969" id="107" transform="matrix(1,0,0,1,1427.5,1146.22)" d="M-59.4,96.5C-51.9,-46.1,-5.8,-138.5,60.5,-138.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="106"/>
    <path stroke="#696969" id="109" transform="matrix(1,0,0,1,1427.5,963.47)" d="M-60.3,279.3C-56.9,-82.8,-9.4,-321.3,60.5,-321.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="108"/>
    <path stroke="#002060" id="111" transform="matrix(1,0,0,1,1600.5,377.53)" d="M-13.5,-1.1C-2.7,-1.1,5.4,1.1,13.5,1.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="102" ed:tosuperid="110"/>
    <path stroke="#002060" id="113" transform="matrix(1,0,0,1,1600.5,617.16)" d="M-13.5,25.1C2.7,25.1,-7.2,-25.1,13.5,-25.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="108" ed:tosuperid="112"/>
    <path stroke="#002060" id="115" transform="matrix(1,0,0,1,1831.5,553.03)" d="M-13.5,39.1C4.6,39.1,-11.7,-39.1,13.5,-39.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="112" ed:tosuperid="114"/>
    <path stroke="#002060" id="117" transform="matrix(1,0,0,1,1831.5,584.28)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="112" ed:tosuperid="116"/>
    <path stroke="#002060" id="119" transform="matrix(1,0,0,1,1831.5,615.53)" d="M-13.5,-23.4C2.4,-23.4,-6.5,23.4,13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="112" ed:tosuperid="118"/>
    <path stroke="#002060" id="121" transform="matrix(1,0,0,1,1831.5,638.97)" d="M-13.5,-46.9C5.2,-46.9,-13.1,46.9,13.5,46.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="112" ed:tosuperid="120"/>
    <path stroke="#002060" id="123" transform="matrix(1,0,0,1,1600.5,679.66)" d="M-13.5,-37.4C4.5,-37.4,-11.3,37.4,13.5,37.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="108" ed:tosuperid="122"/>
    <path stroke="#002060" id="125" transform="matrix(1,0,0,1,1600.5,695.28)" d="M-13.5,-53.1C5.4,-53.1,-13.5,53.1,13.5,53.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="108" ed:tosuperid="124"/>
    <path stroke="#002060" id="129" transform="matrix(1,0,0,1,1684.5,717.09)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="122" ed:tosuperid="128"/>
    <path stroke="#002060" id="131" transform="matrix(1,0,0,1,1684.5,748.34)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="124" ed:tosuperid="130"/>
    <path stroke="#002060" id="133" transform="matrix(1,0,0,1,1617.5,870.22)" d="M-13.5,1.6C-2.3,1.6,4.5,-1.6,13.5,-1.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="104" ed:tosuperid="132"/>
    <path stroke="#002060" id="135" transform="matrix(1,0,0,1,1617.5,885.84)" d="M-13.5,-14C0.5,-14,-2.1,14,13.5,14" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="104" ed:tosuperid="134"/>
    <path stroke="#002060" id="137" transform="matrix(1,0,0,1,1735.5,868.59)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="132" ed:tosuperid="136"/>
    <path stroke="#002060" id="139" transform="matrix(1,0,0,1,1714.5,899.84)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="134" ed:tosuperid="138"/>
    <path stroke="#002060" id="141" transform="matrix(1,0,0,1,1579.5,982.66)" d="M-13.5,25.1C2.7,25.1,-7.2,-25.1,13.5,-25.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="106" ed:tosuperid="140"/>
    <path stroke="#002060" id="143" transform="matrix(1,0,0,1,1579.5,998.28)" d="M-13.5,9.4C-0.5,9.4,0.3,-9.4,13.5,-9.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="106" ed:tosuperid="142"/>
    <path stroke="#002060" id="145" transform="matrix(1,0,0,1,1579.5,1013.91)" d="M-13.5,-6.2C-1.2,-6.2,2,6.2,13.5,6.2" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="106" ed:tosuperid="144"/>
    <path stroke="#002060" id="147" transform="matrix(1,0,0,1,1579.5,1029.53)" d="M-13.5,-21.8C2.1,-21.8,-5.8,21.8,13.5,21.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="106" ed:tosuperid="146"/>
    <path stroke="#002060" id="149" transform="matrix(1,0,0,1,1579.5,1045.16)" d="M-13.5,-37.4C4.5,-37.4,-11.3,37.4,13.5,37.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="106" ed:tosuperid="148"/>
    <path stroke="#002060" id="151" transform="matrix(1,0,0,1,1663.5,1051.34)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="146" ed:tosuperid="150"/>
    <path stroke="#002060" id="155" transform="matrix(1,0,0,1,1663.5,1020.09)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="144" ed:tosuperid="154"/>
    <path stroke="#002060" id="167" transform="matrix(1,0,0,1,1954.5,506.16)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="114" ed:tosuperid="166"/>
    <path stroke="#002060" id="169" transform="matrix(1,0,0,1,1954.5,521.78)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="114" ed:tosuperid="168"/>
    <path stroke="#002060" id="171" transform="matrix(1,0,0,1,1993.5,568.66)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="116" ed:tosuperid="170"/>
    <path stroke="#002060" id="173" transform="matrix(1,0,0,1,1993.5,584.28)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="116" ed:tosuperid="172"/>
    <path stroke="#002060" id="175" transform="matrix(1,0,0,1,1967.5,685.84)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="120" ed:tosuperid="174"/>
    <path stroke="#002060" id="177" transform="matrix(1,0,0,1,1954.5,631.16)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="118" ed:tosuperid="176"/>
    <path stroke="#002060" id="185" transform="matrix(1,0,0,1,1954.5,646.78)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="118" ed:tosuperid="184"/>
    <path stroke="#002060" id="197" transform="matrix(1,0,0,1,1663.5,988.84)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="142" ed:tosuperid="196"/>
    <path stroke="#002060" id="199" transform="matrix(1,0,0,1,1663.5,1082.59)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="148" ed:tosuperid="198"/>
    <path stroke="#696969" id="205" transform="matrix(1,0,0,1,1306.5,1226.88)" d="M53.8,15.8C38.2,-29.6,-3.8,-57.8,-60.5,-57.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="204"/>
    <path stroke="#696969" id="207" transform="matrix(1,0,0,1,1427.5,1248.91)" d="M-40.9,-6.2C-20.2,-24.8,15.5,-35.8,60.5,-35.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="206"/>
    <path stroke="#002060" id="209" transform="matrix(1,0,0,1,1600.5,1180.22)" d="M-13.5,32.9C3.9,32.9,-10,-32.9,13.5,-32.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="206" ed:tosuperid="208"/>
    <path stroke="#002060" id="211" transform="matrix(1,0,0,1,1600.5,1261.84)" d="M-13.5,-48.8C5.3,-48.8,-13.3,48.8,13.5,48.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="206" ed:tosuperid="210"/>
    <path stroke="#002060" id="217" transform="matrix(1,0,0,1,1600.5,1195.84)" d="M-13.5,17.3C1.2,17.3,-3.7,-17.3,13.5,-17.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="206" ed:tosuperid="216"/>
    <path stroke="#002060" id="219" transform="matrix(1,0,0,1,1600.5,1211.47)" d="M-13.5,1.6C-2.3,1.6,4.5,-1.6,13.5,-1.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="206" ed:tosuperid="218"/>
    <path stroke="#002060" id="221" transform="matrix(1,0,0,1,1600.5,1230.59)" d="M-13.5,-17.5C1.2,-17.5,-3.8,17.5,13.5,17.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="206" ed:tosuperid="220"/>
    <path stroke="#002060" id="223" transform="matrix(1,0,0,1,1600.5,1246.22)" d="M-13.5,-33.1C4,-33.1,-10.1,33.1,13.5,33.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="206" ed:tosuperid="222"/>
    <path stroke="#002060" id="225" transform="matrix(1,0,0,1,1705.5,1147.34)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="208" ed:tosuperid="224"/>
    <path stroke="#002060" id="237" transform="matrix(1,0,0,1,1705.5,1178.59)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="216" ed:tosuperid="236"/>
    <path stroke="#002060" id="239" transform="matrix(1,0,0,1,1684.5,1209.84)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="218" ed:tosuperid="238"/>
    <path stroke="#002060" id="241" transform="matrix(1,0,0,1,1684.5,1248.09)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="220" ed:tosuperid="240"/>
    <path stroke="#002060" id="243" transform="matrix(1,0,0,1,1684.5,1279.34)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="222" ed:tosuperid="242"/>
    <path stroke="#696969" id="248" transform="matrix(1,0,0,1,1306.5,879.03)" d="M60.4,363.7C57.7,-99.7,10,-405.7,-60.5,-405.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="247"/>
    <path stroke="#002060" id="257" transform="matrix(1,0,0,1,1154.5,321.62)" d="M13.5,151.7C-5.4,151.7,13.5,-151.7,-13.5,-151.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="247" ed:tosuperid="256"/>
    <path stroke="#002060" id="259" transform="matrix(1,0,0,1,1133.5,1100.16)" d="M13.5,68.9C-5.4,68.9,13.5,-68.9,-13.5,-68.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="204" ed:tosuperid="258"/>
    <path stroke="#002060" id="261" transform="matrix(1,0,0,1,1154.5,549.91)" d="M13.5,-76.6C-5.4,-76.6,13.5,76.6,-13.5,76.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="247" ed:tosuperid="260"/>
    <path stroke="#002060" id="263" transform="matrix(1,0,0,1,1036.5,497.37)" d="M13.5,129.1C-5.4,129.1,13.5,-129.1,-13.5,-129.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="260" ed:tosuperid="262"/>
    <path stroke="#002060" id="265" transform="matrix(1,0,0,1,1036.5,554.9)" d="M13.5,71.6C-5.4,71.6,13.5,-71.6,-13.5,-71.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="260" ed:tosuperid="264"/>
    <path stroke="#002060" id="267" transform="matrix(1,0,0,1,1036.5,617.08)" d="M13.5,9.4C0.5,9.4,-0.3,-9.4,-13.5,-9.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="260" ed:tosuperid="266"/>
    <path stroke="#002060" id="269" transform="matrix(1,0,0,1,1036.5,679.27)" d="M13.5,-52.8C-5.4,-52.8,13.5,52.8,-13.5,52.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="260" ed:tosuperid="268"/>
    <path stroke="#002060" id="271" transform="matrix(1,0,0,1,1036.5,746.2)" d="M13.5,-119.7C-5.4,-119.7,13.5,119.7,-13.5,119.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="260" ed:tosuperid="270"/>
    <path stroke="#002060" id="273" transform="matrix(1,0,0,1,1057.5,182.47)" d="M13.5,-12.6C-0.2,-12.6,1.4,12.6,-13.5,12.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="256" ed:tosuperid="272"/>
    <path stroke="#002060" id="275" transform="matrix(1,0,0,1,869.5,229.42)" d="M13.5,-34.4C-4.1,-34.4,10.5,34.4,-13.5,34.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="272" ed:tosuperid="274"/>
    <path stroke="#002060" id="277" transform="matrix(1,0,0,1,1057.5,116.83)" d="M13.5,53.1C-5.4,53.1,13.5,-53.1,-13.5,-53.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="256" ed:tosuperid="276"/>
    <path stroke="#002060" id="279" transform="matrix(1,0,0,1,869.5,245.04)" d="M13.5,-50C-5.3,-50,13.4,50,-13.5,50" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="272" ed:tosuperid="278"/>
    <path stroke="#002060" id="281" transform="matrix(1,0,0,1,869.5,179.4)" d="M13.5,15.6C-0.9,15.6,2.9,-15.6,-13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="272" ed:tosuperid="280"/>
    <path stroke="#002060" id="285" transform="matrix(1,0,0,1,939.5,608.3)" d="M13.5,-0.6C2.7,-0.6,-5.4,0.6,-13.5,0.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="266" ed:tosuperid="284"/>
    <path stroke="#002060" id="287" transform="matrix(1,0,0,1,939.5,737.36)" d="M13.5,-5.3C1.5,-5.3,-2.5,5.3,-13.5,5.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="268" ed:tosuperid="286"/>
    <path stroke="#002060" id="292" transform="matrix(1,0,0,1,939.5,373.59)" d="M13.5,-5.3C1.4,-5.3,-2.5,5.3,-13.5,5.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="262" ed:tosuperid="291"/>
    <path stroke="#002060" id="294" transform="matrix(1,0,0,1,939.5,389.21)" d="M13.5,-21C-1.9,-21,5.4,21,-13.5,21" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="262" ed:tosuperid="293"/>
    <path stroke="#002060" id="296" transform="matrix(1,0,0,1,939.5,488.62)" d="M13.5,-5.3C1.5,-5.3,-2.5,5.3,-13.5,5.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="264" ed:tosuperid="295"/>
    <path stroke="#002060" id="298" transform="matrix(1,0,0,1,939.5,504.24)" d="M13.5,-20.9C-1.9,-20.9,5.4,20.9,-13.5,20.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="264" ed:tosuperid="297"/>
    <path stroke="#002060" id="300" transform="matrix(1,0,0,1,777.5,410.12)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="293" ed:tosuperid="299"/>
    <path stroke="#002060" id="309" transform="matrix(1,0,0,1,777.5,525.12)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="297" ed:tosuperid="308"/>
    <path stroke="#002060" id="313" transform="matrix(1,0,0,1,939.5,752.98)" d="M13.5,-20.9C-1.9,-20.9,5.4,20.9,-13.5,20.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="268" ed:tosuperid="312"/>
    <path stroke="#002060" id="315" transform="matrix(1,0,0,1,939.5,628.61)" d="M13.5,-20.9C-1.9,-20.9,5.4,20.9,-13.5,20.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="266" ed:tosuperid="314"/>
    <path stroke="#002060" id="317" transform="matrix(1,0,0,1,777.5,654.24)" d="M13.5,-4.7C1.6,-4.7,-2.8,4.7,-13.5,4.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="314" ed:tosuperid="316"/>
    <path stroke="#002060" id="319" transform="matrix(1,0,0,1,777.5,773.86)" d="M13.5,0.1C2.7,0.1,-5.4,-0.1,-13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="312" ed:tosuperid="318"/>
    <path stroke="#002060" id="321" transform="matrix(1,0,0,1,939.5,871.29)" d="M13.5,-5.4C1.4,-5.4,-2.5,5.4,-13.5,5.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="270" ed:tosuperid="320"/>
    <path stroke="#002060" id="324" transform="matrix(1,0,0,1,777.5,921.98)" d="M13.5,-4.7C1.6,-4.7,-2.8,4.7,-13.5,4.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="325" ed:tosuperid="326"/>
    <path stroke="#435fbc" id="327" transform="matrix(1,0,0,1,939.5,891.6)" d="M13.5,-25.7C-2.8,-25.7,7.4,25.7,-13.5,25.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="270" ed:tosuperid="325"/>
    <path stroke="#002060" id="333" transform="matrix(1,0,0,1,1133.5,1175.23)" d="M13.5,-6.2C1.2,-6.2,-2,6.2,-13.5,6.2" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="204" ed:tosuperid="332"/>
    <path stroke="#002060" id="335" transform="matrix(1,0,0,1,1133.5,1250.29)" d="M13.5,-81.3C-5.4,-81.3,13.5,81.3,-13.5,81.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="204" ed:tosuperid="334"/>
    <path stroke="#002060" id="337" transform="matrix(1,0,0,1,1015.5,1007.85)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="258" ed:tosuperid="336"/>
    <path stroke="#002060" id="339" transform="matrix(1,0,0,1,1015.5,1023.48)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="258" ed:tosuperid="338"/>
    <path stroke="#002060" id="341" transform="matrix(1,0,0,1,1015.5,1046.91)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="258" ed:tosuperid="340"/>
    <path stroke="#002060" id="343" transform="matrix(1,0,0,1,918.5,1054.73)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="340" ed:tosuperid="342"/>
    <path stroke="#002060" id="345" transform="matrix(1,0,0,1,918.5,1070.35)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="340" ed:tosuperid="344"/>
    <path stroke="#002060" id="347" transform="matrix(1,0,0,1,1036.5,1145.41)" d="M13.5,36C-4.3,36,11,-36,-13.5,-36" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="332" ed:tosuperid="346"/>
    <path stroke="#002060" id="349" transform="matrix(1,0,0,1,1036.5,1161.04)" d="M13.5,20.4C-1.8,20.4,5.2,-20.4,-13.5,-20.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="332" ed:tosuperid="348"/>
    <path stroke="#002060" id="351" transform="matrix(1,0,0,1,1036.5,1176.66)" d="M13.5,4.8C1.6,4.8,-2.8,-4.8,-13.5,-4.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="332" ed:tosuperid="350"/>
    <path stroke="#002060" id="353" transform="matrix(1,0,0,1,1036.5,1192.29)" d="M13.5,-10.9C0.2,-10.9,0.5,10.9,-13.5,10.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="332" ed:tosuperid="352"/>
    <path stroke="#002060" id="355" transform="matrix(1,0,0,1,1036.5,1217.41)" d="M13.5,-36C-4.3,-36,11,36,-13.5,36" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="332" ed:tosuperid="354"/>
    <path stroke="#002060" id="359" transform="matrix(1,0,0,1,1036.5,1308.1)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="334" ed:tosuperid="358"/>
    <path stroke="#002060" id="361" transform="matrix(1,0,0,1,1036.5,1347.16)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="334" ed:tosuperid="360"/>
    <path stroke="#002060" id="363" transform="matrix(1,0,0,1,1036.5,1323.73)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="334" ed:tosuperid="362"/>
    <path stroke="#002060" id="365" transform="matrix(1,0,0,1,939.5,1354.98)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="360" ed:tosuperid="364"/>
    <path stroke="#002060" id="367" transform="matrix(1,0,0,1,939.5,1370.6)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="360" ed:tosuperid="366"/>
    <path stroke="#002060" id="369" transform="matrix(1,0,0,1,816.5,1347.16)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="364" ed:tosuperid="368"/>
    <path stroke="#002060" id="371" transform="matrix(1,0,0,1,764.5,1378.41)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="366" ed:tosuperid="370"/>
    <path stroke="#696969" id="417" transform="matrix(1,0,0,1,1427.5,1631.91)" d="M-60.3,-305.2C-57.2,88,-9.6,347.2,60.5,347.2" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="416"/>
    <path stroke="#002060" id="419" transform="matrix(1,0,0,1,1579.5,1868.09)" d="M-13.5,111C5.4,111,-13.5,-111,13.5,-111" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="416" ed:tosuperid="418"/>
    <path stroke="#002060" id="421" transform="matrix(1,0,0,1,1579.5,1914.97)" d="M-13.5,64.1C5.4,64.1,-13.5,-64.1,13.5,-64.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="416" ed:tosuperid="420"/>
    <path stroke="#002060" id="423" transform="matrix(1,0,0,1,1579.5,2024.34)" d="M-13.5,-45.3C5.1,-45.3,-12.9,45.3,13.5,45.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="416" ed:tosuperid="422"/>
    <path stroke="#002060" id="427" transform="matrix(1,0,0,1,1579.5,2086.84)" d="M-13.5,-107.8C5.4,-107.8,-13.5,107.8,13.5,107.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="416" ed:tosuperid="426"/>
    <path stroke="#002060" id="429" transform="matrix(1,0,0,1,1780.5,1757.09)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="418" ed:tosuperid="428"/>
    <path stroke="#002060" id="431" transform="matrix(1,0,0,1,1780.5,1772.72)" d="M-13.5,-15.6C0.9,-15.6,-2.9,15.6,13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="418" ed:tosuperid="430"/>
    <path stroke="#002060" id="433" transform="matrix(1,0,0,1,1814.5,1835.22)" d="M-13.5,15.6C0.9,15.6,-2.9,-15.6,13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="420" ed:tosuperid="432"/>
    <path stroke="#002060" id="435" transform="matrix(1,0,0,1,1814.5,1850.84)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="420" ed:tosuperid="434"/>
    <path stroke="#002060" id="437" transform="matrix(1,0,0,1,1814.5,1866.47)" d="M-13.5,-15.6C0.9,-15.6,-2.9,15.6,13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="420" ed:tosuperid="436"/>
    <path stroke="#002060" id="439" transform="matrix(1,0,0,1,1734.5,2053.97)" d="M-13.5,15.6C0.9,15.6,-2.9,-15.6,13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="422" ed:tosuperid="438"/>
    <path stroke="#002060" id="441" transform="matrix(1,0,0,1,1734.5,2069.59)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="422" ed:tosuperid="440"/>
    <path stroke="#002060" id="443" transform="matrix(1,0,0,1,1734.5,2085.22)" d="M-13.5,-15.6C0.9,-15.6,-2.9,15.6,13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="422" ed:tosuperid="442"/>
    <path stroke="#002060" id="445" transform="matrix(1,0,0,1,1865.5,2038.34)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="438" ed:tosuperid="444"/>
    <path stroke="#002060" id="451" transform="matrix(1,0,0,1,1579.5,1969.66)" d="M-13.5,9.4C-0.5,9.4,0.3,-9.4,13.5,-9.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="416" ed:tosuperid="450"/>
    <path stroke="#002060" id="453" transform="matrix(1,0,0,1,1754.5,1936.78)" d="M-13.5,23.4C2.4,23.4,-6.5,-23.4,13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="450" ed:tosuperid="452"/>
    <path stroke="#002060" id="455" transform="matrix(1,0,0,1,1754.5,1968.03)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="450" ed:tosuperid="454"/>
    <path stroke="#002060" id="457" transform="matrix(1,0,0,1,1754.5,1983.66)" d="M-13.5,-23.4C2.4,-23.4,-6.5,23.4,13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="450" ed:tosuperid="456"/>
    <path stroke="#002060" id="459" transform="matrix(1,0,0,1,1865.5,2069.59)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="440" ed:tosuperid="458"/>
    <path stroke="#002060" id="461" transform="matrix(1,0,0,1,1831.5,2100.84)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="442" ed:tosuperid="460"/>
    <path stroke="#002060" id="463" transform="matrix(1,0,0,1,1708.5,2171.16)" d="M-13.5,23.4C2.4,23.4,-6.5,-23.4,13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="426" ed:tosuperid="462"/>
    <path stroke="#002060" id="465" transform="matrix(1,0,0,1,1708.5,2202.41)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="426" ed:tosuperid="464"/>
    <path stroke="#002060" id="467" transform="matrix(1,0,0,1,1708.5,2225.84)" d="M-13.5,-31.3C3.7,-31.3,-9.5,31.3,13.5,31.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="426" ed:tosuperid="466"/>
    <path stroke="#002060" id="469" transform="matrix(1,0,0,1,1818.5,2139.91)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="462" ed:tosuperid="468"/>
    <path stroke="#002060" id="471" transform="matrix(1,0,0,1,1818.5,2155.53)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="462" ed:tosuperid="470"/>
    <path stroke="#002060" id="475" transform="matrix(1,0,0,1,1818.5,2202.41)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="464" ed:tosuperid="474"/>
    <path stroke="#002060" id="477" transform="matrix(1,0,0,1,1818.5,2257.09)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="466" ed:tosuperid="476"/>
    <path stroke="#002060" id="485" transform="matrix(1,0,0,1,1780.5,1741.47)" d="M-13.5,15.6C0.9,15.6,-2.9,-15.6,13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="418" ed:tosuperid="484"/>
    <path stroke="#002060" id="487" transform="matrix(1,0,0,1,1754.5,1952.41)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="450" ed:tosuperid="486"/>
    <path stroke="#435fbc" id="497" transform="matrix(1,0,0,1,1818.5,2218.03)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="464" ed:tosuperid="495"/>
    <path stroke="#002060" id="509" transform="matrix(1,0,0,1,1600.5,710.91)" d="M-13.5,-68.7C5.4,-68.7,-13.5,68.7,13.5,68.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="108" ed:tosuperid="508"/>
    <path stroke="#002060" id="511" transform="matrix(1,0,0,1,1671.5,779.59)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="508" ed:tosuperid="510"/>
    <path stroke="#002060" id="513" transform="matrix(1,0,0,1,1600.5,726.53)" d="M-13.5,-84.3C5.4,-84.3,-13.5,84.3,13.5,84.3" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="108" ed:tosuperid="512"/>
    <path stroke="#002060" id="515" transform="matrix(1,0,0,1,1684.5,810.84)" d="M-13.5,0C-2.7,0,5.4,0,13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="512" ed:tosuperid="514"/>
    <path stroke="#696969" id="526" transform="matrix(1,0,0,1,1427.5,1395.28)" d="M-58.8,-68.6C-49.6,40.5,-4.1,110.6,60.5,110.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="525"/>
    <path stroke="#002060" id="528" transform="matrix(1,0,0,1,1617.5,1441.78)" d="M-13.5,64.1C5.4,64.1,-13.5,-64.1,13.5,-64.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="525" ed:tosuperid="527"/>
    <path stroke="#002060" id="530" transform="matrix(1,0,0,1,1714.5,1382.41)" d="M-13.5,-4.7C-1.6,-4.7,2.8,4.7,13.5,4.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="527" ed:tosuperid="529"/>
    <path stroke="#002060" id="532" transform="matrix(1,0,0,1,1617.5,1524.53)" d="M-13.5,-18.7C1.5,-18.7,-4.4,18.7,13.5,18.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="525" ed:tosuperid="531"/>
    <path stroke="#002060" id="534" transform="matrix(1,0,0,1,1714.5,1480.66)" d="M-13.5,62.6C5.4,62.6,-13.5,-62.6,13.5,-62.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="531" ed:tosuperid="539"/>
    <path stroke="#002060" id="536" transform="matrix(1,0,0,1,1714.5,1519.72)" d="M-13.5,23.5C2.4,23.5,-6.5,-23.5,13.5,-23.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="531" ed:tosuperid="535"/>
    <path stroke="#002060" id="538" transform="matrix(1,0,0,1,1714.5,1582.22)" d="M-13.5,-39C4.6,-39,-11.7,39,13.5,39" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="531" ed:tosuperid="537"/>
    <path stroke="#002060" id="542" transform="matrix(1,0,0,1,1811.5,1472.78)" d="M-13.5,23.4C2.4,23.4,-6.5,-23.4,13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="535" ed:tosuperid="541"/>
    <path stroke="#002060" id="544" transform="matrix(1,0,0,1,1811.5,1488.41)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="535" ed:tosuperid="543"/>
    <path stroke="#002060" id="546" transform="matrix(1,0,0,1,1811.5,1504.03)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="535" ed:tosuperid="545"/>
    <path stroke="#002060" id="548" transform="matrix(1,0,0,1,1811.5,1519.66)" d="M-13.5,-23.4C2.4,-23.4,-6.5,23.4,13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="535" ed:tosuperid="547"/>
    <path stroke="#002060" id="550" transform="matrix(1,0,0,1,1895.5,1449.28)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="541" ed:tosuperid="549"/>
    <path stroke="#002060" id="552" transform="matrix(1,0,0,1,1895.5,1480.53)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="543" ed:tosuperid="551"/>
    <path stroke="#002060" id="556" transform="matrix(1,0,0,1,1895.5,1511.78)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="545" ed:tosuperid="555"/>
    <path stroke="#002060" id="558" transform="matrix(1,0,0,1,1895.5,1543.03)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="547" ed:tosuperid="557"/>
    <path stroke="#002060" id="560" transform="matrix(1,0,0,1,1850.5,1597.78)" d="M-13.5,23.4C2.4,23.4,-6.5,-23.4,13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="537" ed:tosuperid="559"/>
    <path stroke="#002060" id="562" transform="matrix(1,0,0,1,1850.5,1613.41)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="537" ed:tosuperid="561"/>
    <path stroke="#002060" id="564" transform="matrix(1,0,0,1,1850.5,1629.03)" d="M-13.5,-7.8C-0.9,-7.8,1.1,7.8,13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="537" ed:tosuperid="563"/>
    <path stroke="#002060" id="566" transform="matrix(1,0,0,1,1850.5,1644.66)" d="M-13.5,-23.4C2.4,-23.4,-6.5,23.4,13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="537" ed:tosuperid="565"/>
    <path stroke="#002060" id="568" transform="matrix(1,0,0,1,1947.5,1574.28)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="559" ed:tosuperid="567"/>
    <path stroke="#002060" id="570" transform="matrix(1,0,0,1,1947.5,1605.53)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="561" ed:tosuperid="569"/>
    <path stroke="#002060" id="572" transform="matrix(1,0,0,1,1947.5,1636.78)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="563" ed:tosuperid="571"/>
    <path stroke="#002060" id="574" transform="matrix(1,0,0,1,1947.5,1668.03)" d="M-13.5,0.1C-2.7,0.1,5.4,-0.1,13.5,-0.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="565" ed:tosuperid="573"/>
    <path stroke="#002060" id="588" transform="matrix(1,0,0,1,642.5,198.17)" d="M13.5,-34.4C-4.1,-34.4,10.5,34.4,-13.5,34.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="280" ed:tosuperid="288"/>
    <path stroke="#002060" id="589" transform="matrix(1,0,0,1,1600.5,400.84)" d="M-13.5,-24.4C2.6,-24.4,-6.9,24.4,13.5,24.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="102" ed:tosuperid="587"/>
    <path stroke="#002060" id="591" transform="matrix(1,0,0,1,1749.5,417.41)" d="M-13.5,7.8C-0.9,7.8,1.1,-7.8,13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="587" ed:tosuperid="590"/>
    <path stroke="#002060" id="593" transform="matrix(1,0,0,1,1749.5,432.91)" d="M-13.5,-7.7C-0.9,-7.7,1.2,7.7,13.5,7.7" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="587" ed:tosuperid="592"/>
    <path stroke="#696969" id="601" transform="matrix(1,0,0,1,1154.5,1842.86)" d="M13.5,137.6C-5.4,137.6,13.5,-137.6,-13.5,-137.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="654" ed:tosuperid="655"/>
    <path stroke="#002060" id="602" transform="matrix(1,0,0,1,1010.5,1570.73)" d="M13.5,134.6C-5.4,134.6,13.5,-134.6,-13.5,-134.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="655" ed:tosuperid="656"/>
    <path stroke="#002060" id="603" transform="matrix(1,0,0,1,1010.5,1636.43)" d="M13.5,68.9C-5.4,68.9,13.5,-68.9,-13.5,-68.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="655" ed:tosuperid="657"/>
    <path stroke="#696969" id="604" transform="matrix(1,0,0,1,1154.5,2129)" d="M13.5,-148.6C-5.4,-148.6,13.5,148.6,-13.5,148.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="654" ed:tosuperid="658"/>
    <path stroke="#002060" id="605" transform="matrix(1,0,0,1,1010.5,1777.18)" d="M13.5,-71.9C-5.4,-71.9,13.5,71.9,-13.5,71.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="655" ed:tosuperid="659"/>
    <path stroke="#002060" id="606" transform="matrix(1,0,0,1,913.5,1436.16)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="656" ed:tosuperid="661"/>
    <path stroke="#002060" id="607" transform="matrix(1,0,0,1,913.5,1517.48)" d="M13.5,50.1C-5.3,50.1,13.4,-50.1,-13.5,-50.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="657" ed:tosuperid="662"/>
    <path stroke="#002060" id="608" transform="matrix(1,0,0,1,913.5,1567.55)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="657" ed:tosuperid="663"/>
    <path stroke="#002060" id="609" transform="matrix(1,0,0,1,913.5,1617.62)" d="M13.5,-50.1C-5.3,-50.1,13.4,50.1,-13.5,50.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="657" ed:tosuperid="664"/>
    <path stroke="#002060" id="610" transform="matrix(1,0,0,1,706.5,1467.41)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="662" ed:tosuperid="665"/>
    <path stroke="#002060" id="611" transform="matrix(1,0,0,1,738.5,1559.74)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="663" ed:tosuperid="666"/>
    <path stroke="#002060" id="612" transform="matrix(1,0,0,1,738.5,1667.69)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="664" ed:tosuperid="667"/>
    <path stroke="#002060" id="613" transform="matrix(1,0,0,1,816.5,1789.63)" d="M13.5,59.4C-5.4,59.4,13.5,-59.4,-13.5,-59.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="659" ed:tosuperid="668"/>
    <path stroke="#002060" id="614" transform="matrix(1,0,0,1,816.5,1841.25)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="659" ed:tosuperid="669"/>
    <path stroke="#002060" id="615" transform="matrix(1,0,0,1,816.5,1900.69)" d="M13.5,-51.6C-5.4,-51.6,13.5,51.6,-13.5,51.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="659" ed:tosuperid="670"/>
    <path stroke="#002060" id="616" transform="matrix(1,0,0,1,719.5,1714.56)" d="M13.5,15.6C-0.9,15.6,2.9,-15.6,-13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="668" ed:tosuperid="671"/>
    <path stroke="#002060" id="617" transform="matrix(1,0,0,1,719.5,1730.19)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="668" ed:tosuperid="672"/>
    <path stroke="#002060" id="618" transform="matrix(1,0,0,1,719.5,1813.06)" d="M13.5,20.4C-1.8,20.4,5.2,-20.4,-13.5,-20.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="669" ed:tosuperid="673"/>
    <path stroke="#002060" id="619" transform="matrix(1,0,0,1,719.5,1828.69)" d="M13.5,4.8C1.6,4.8,-2.8,-4.8,-13.5,-4.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="669" ed:tosuperid="674"/>
    <path stroke="#002060" id="620" transform="matrix(1,0,0,1,719.5,1928.88)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="670" ed:tosuperid="675"/>
    <path stroke="#002060" id="621" transform="matrix(1,0,0,1,719.5,1944.5)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="670" ed:tosuperid="676"/>
    <path stroke="#002060" id="622" transform="matrix(1,0,0,1,738.5,1602)" d="M13.5,-34.4C-4.1,-34.4,10.5,34.4,-13.5,34.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="663" ed:tosuperid="677"/>
    <path stroke="#002060" id="623" transform="matrix(1,0,0,1,719.5,1745.81)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="668" ed:tosuperid="678"/>
    <path stroke="#002060" id="624" transform="matrix(1,0,0,1,719.5,1853.81)" d="M13.5,-20.4C-1.8,-20.4,5.2,20.4,-13.5,20.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="669" ed:tosuperid="679"/>
    <path stroke="#002060" id="625" transform="matrix(1,0,0,1,719.5,1960.13)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="670" ed:tosuperid="680"/>
    <path stroke="#002060" id="626" transform="matrix(1,0,0,1,1010.5,2216.5)" d="M13.5,61.1C-5.4,61.1,13.5,-61.1,-13.5,-61.1" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="658" ed:tosuperid="681"/>
    <path stroke="#002060" id="627" transform="matrix(1,0,0,1,1010.5,2318.06)" d="M13.5,-40.5C-4.8,-40.5,12.1,40.5,-13.5,40.5" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="658" ed:tosuperid="682"/>
    <path stroke="#002060" id="628" transform="matrix(1,0,0,1,1010.5,2385.31)" d="M13.5,-107.8C-5.4,-107.8,13.5,107.8,-13.5,107.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="658" ed:tosuperid="683"/>
    <path stroke="#002060" id="629" transform="matrix(1,0,0,1,939.5,2132)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="681" ed:tosuperid="684"/>
    <path stroke="#002060" id="630" transform="matrix(1,0,0,1,939.5,2202.31)" d="M13.5,-46.9C-5.2,-46.9,13.1,46.9,-13.5,46.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="681" ed:tosuperid="685"/>
    <path stroke="#002060" id="631" transform="matrix(1,0,0,1,816.5,2085.13)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="684" ed:tosuperid="686"/>
    <path stroke="#002060" id="632" transform="matrix(1,0,0,1,816.5,2132)" d="M13.5,-23.4C-2.4,-23.4,6.5,23.4,-13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="684" ed:tosuperid="687"/>
    <path stroke="#002060" id="633" transform="matrix(1,0,0,1,790.5,2233.56)" d="M13.5,15.6C-0.9,15.6,2.9,-15.6,-13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="685" ed:tosuperid="688"/>
    <path stroke="#002060" id="634" transform="matrix(1,0,0,1,790.5,2249.19)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="685" ed:tosuperid="689"/>
    <path stroke="#002060" id="635" transform="matrix(1,0,0,1,790.5,2264.81)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="685" ed:tosuperid="690"/>
    <path stroke="#002060" id="636" transform="matrix(1,0,0,1,719.5,2046.06)" d="M13.5,15.6C-0.9,15.6,2.9,-15.6,-13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="686" ed:tosuperid="691"/>
    <path stroke="#002060" id="637" transform="matrix(1,0,0,1,719.5,2061.69)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="686" ed:tosuperid="692"/>
    <path stroke="#002060" id="638" transform="matrix(1,0,0,1,719.5,2077.31)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="686" ed:tosuperid="693"/>
    <path stroke="#002060" id="639" transform="matrix(1,0,0,1,719.5,2139.81)" d="M13.5,15.6C-0.9,15.6,2.9,-15.6,-13.5,-15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="687" ed:tosuperid="694"/>
    <path stroke="#002060" id="640" transform="matrix(1,0,0,1,719.5,2155.44)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="687" ed:tosuperid="695"/>
    <path stroke="#002060" id="641" transform="matrix(1,0,0,1,719.5,2171.06)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="687" ed:tosuperid="696"/>
    <path stroke="#002060" id="642" transform="matrix(1,0,0,1,900.5,2335.13)" d="M13.5,23.4C-2.4,23.4,6.5,-23.4,-13.5,-23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="682" ed:tosuperid="697"/>
    <path stroke="#002060" id="643" transform="matrix(1,0,0,1,900.5,2358.56)" d="M13.5,0C2.7,0,-5.4,0,-13.5,0" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="682" ed:tosuperid="698"/>
    <path stroke="#002060" id="644" transform="matrix(1,0,0,1,900.5,2382)" d="M13.5,-23.4C-2.4,-23.4,6.5,23.4,-13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="682" ed:tosuperid="699"/>
    <path stroke="#002060" id="645" transform="matrix(1,0,0,1,803.5,2350.75)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="698" ed:tosuperid="700"/>
    <path stroke="#002060" id="646" transform="matrix(1,0,0,1,803.5,2366.38)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="698" ed:tosuperid="701"/>
    <path stroke="#002060" id="647" transform="matrix(1,0,0,1,939.5,2472.69)" d="M13.5,20.4C-1.8,20.4,5.2,-20.4,-13.5,-20.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="683" ed:tosuperid="702"/>
    <path stroke="#002060" id="648" transform="matrix(1,0,0,1,939.5,2508.69)" d="M13.5,-15.6C-0.9,-15.6,2.9,15.6,-13.5,15.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="683" ed:tosuperid="703"/>
    <path stroke="#002060" id="649" transform="matrix(1,0,0,1,751.5,2511.75)" d="M13.5,12.6C-0.2,12.6,1.4,-12.6,-13.5,-12.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="703" ed:tosuperid="704"/>
    <path stroke="#002060" id="650" transform="matrix(1,0,0,1,721.5,2444.5)" d="M13.5,7.8C0.9,7.8,-1.1,-7.8,-13.5,-7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="702" ed:tosuperid="705"/>
    <path stroke="#002060" id="651" transform="matrix(1,0,0,1,721.5,2460.13)" d="M13.5,-7.8C0.9,-7.8,-1.1,7.8,-13.5,7.8" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="702" ed:tosuperid="706"/>
    <path stroke="#002060" id="652" transform="matrix(1,0,0,1,751.5,2536.88)" d="M13.5,-12.6C-0.2,-12.6,1.4,12.6,-13.5,12.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="703" ed:tosuperid="707"/>
    <path stroke="#002060" id="653" transform="matrix(1,0,0,1,308.5,1578.56)" d="M13.5,-26.6C-3,-26.6,7.8,26.6,-13.5,26.6" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="666" ed:tosuperid="708"/>
    <path stroke="#696969" id="710" transform="matrix(1,0,0,1,1306.5,1632.57)" d="M60.3,-305.9C57.2,88.1,9.6,347.9,-60.5,347.9" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="101" ed:tosuperid="654"/>
    <path stroke="#002060" id="763" transform="matrix(1,0,0,1,719.5,1975.75)" d="M13.5,-23.4C-2.4,-23.4,6.5,23.4,-13.5,23.4" stroke-linejoin="round" stroke-linecap="round" fill="none" ed:parentid="670" ed:tosuperid="762"/>
    <g ed:topictype="callout" ed:height="35" id="158" transform="matrix(1,0,0,1,1626.48,524.34)" ed:width="189.04" ed:parentid="112" ed:layout="rightmap">
        <path stroke="#4badd0" d="M8.8,0L180.3,0L189,17.5L180.3,35L97.7,35L91.2,43L87.5,35L8.8,35L0,17.5L8.8,0z" stroke-linejoin="round" fill="#e9f1f7"/>
        <text class="st12">
            <tspan x="14" style="white-space:pre" y="21.4">PCB是进程存在的唯一标志</tspan>
        </text>
    </g>
    <g ed:topictype="callout" ed:height="35" id="159" transform="matrix(1,0,0,1,1714.48,312.34)" ed:width="253.04" ed:parentid="110" ed:layout="rightmap">
        <path stroke="#4badd0" d="M8.8,0L244.3,0L253,17.5L244.3,35L128.2,35L119.9,41.5L117.4,35L8.8,35L0,17.5L8.8,0z" stroke-linejoin="round" fill="#e9f1f7"/>
        <text class="st13">
            <tspan x="14" style="white-space:pre" y="21.4">进程实体是静态的，进程则强调动态！</tspan>
        </text>
    </g>
    <g ed:topictype="callout" ed:height="35" id="255" transform="matrix(1,0,0,1,1894,1148.72)" ed:width="110.04" ed:parentid="246" ed:layout="rightmap">
        <path stroke="#4badd0" d="M8.8,0L101.3,0L110,17.5L101.3,35L8.8,35L1.7,20.9L-12,17.5L1.7,14.1L8.8,0z" stroke-linejoin="round" fill="#e9f1f7"/>
        <text class="st14">
            <tspan x="14" style="white-space:pre" y="21.4">三种基本状态</tspan>
        </text>
    </g>
    <g ed:topictype="callout" ed:height="35" id="307" transform="matrix(1,0,0,1,739.96,301.56)" ed:width="165.04" ed:parentid="291" ed:layout="leftmap">
        <path stroke="#4badd0" d="M8.8,0L156.3,0L165,17.5L156.3,35L110.4,35L125.4,52.6L93.8,35L8.8,35L0,17.5L8.8,0z" stroke-linejoin="round" fill="#e9f1f7"/>
        <text class="st15">
            <tspan x="14" style="white-space:pre" y="21.4">无 → 创建态 → 就绪态</tspan>
        </text>
    </g>
    <g ed:topictype="callout" ed:height="54" id="328" transform="matrix(1,0,0,1,715.28,780.42)" ed:width="189.72" ed:parentid="320" ed:layout="leftmap">
        <path stroke="#4badd0" d="M13.5,0L176.2,0L189.7,27L176.2,54L134.8,54L149.9,71.5L118,54L13.5,54L0,27L13.5,0z" stroke-linejoin="round" fill="#e9f1f7"/>
        <text class="st15">
            <tspan x="21" style="white-space:pre" y="21.4">运行态 → 阻塞态/就绪态</tspan>
            <tspan x="21" style="white-space:pre" y="40.5">就绪态 → 运行态</tspan>
        </text>
    </g>
    <g ed:topictype="callout" ed:height="35" id="329" transform="matrix(1,0,0,1,773.96,665.42)" ed:width="131.04" ed:parentid="286" ed:layout="leftmap">
        <path stroke="#4badd0" d="M8.8,0L122.3,0L131,17.5L122.3,35L86.2,35L95.8,52.5L72.5,35L8.8,35L0,17.5L8.8,0z" stroke-linejoin="round" fill="#e9f1f7"/>
        <text class="st15">
            <tspan x="14" style="white-space:pre" y="21.4">阻塞态 → 就绪态</tspan>
        </text>
    </g>
    <g ed:topictype="callout" ed:height="35" id="330" transform="matrix(1,0,0,1,773.96,531.68)" ed:width="131.04" ed:parentid="284" ed:layout="leftmap">
        <path stroke="#4badd0" d="M8.8,0L122.3,0L131,17.5L122.3,35L86.2,35L95.8,52.5L72.5,35L8.8,35L0,17.5L8.8,0z" stroke-linejoin="round" fill="#e9f1f7"/>
        <text class="st15">
            <tspan x="14" style="white-space:pre" y="21.4">运行态 → 阻塞态</tspan>
        </text>
    </g>
    <g ed:topictype="callout" ed:height="35" id="331" transform="matrix(1,0,0,1,649.96,416.68)" ed:width="255.04" ed:parentid="295" ed:layout="leftmap">
        <path stroke="#4badd0" d="M8.8,0L246.3,0L255,17.5L246.3,35L175.1,35L203.6,52.5L149.4,35L8.8,35L0,17.5L8.8,0z" stroke-linejoin="round" fill="#e9f1f7"/>
        <text class="st15">
            <tspan x="14" style="white-space:pre" y="21.4">就绪态/阻塞态/运行态 → 终止态 → 无</tspan>
        </text>
    </g>
    <g ed:topictype="mainidea" ed:height="84" id="101" transform="matrix(1,0,0,1,1309,1242.72)" ed:width="116" ed:layout="map">
        <path stroke="#435fbc" d="M4,0L112,0C114.7,0,116,1.3,116,4L116,80C116,82.7,114.7,84,112,84L4,84C1.3,84,0,82.7,0,80L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="3" fill="#ebebeb"/>
        <text class="st16">
            <tspan x="38" style="white-space:pre" y="34.5">进程</tspan>
            <tspan x="21" style="white-space:pre" y="60.5">Process</tspan>
        </text>
    </g>
    <g ed:height="42" id="102" transform="matrix(1,0,0,1,1488,355.47)" ed:width="99" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L95,0C97.7,0,99,1.3,99,4L99,38C99,40.7,97.7,42,95,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">定义</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600; color:#c00000;&quot;>程序和进程的区别&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>：程序就是一个指令序列，是静态的。而进程是程序在处理机上的一次执行过程，是动态的。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>进程有许多定义：&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 进程是程序的一次执行过程&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 进程是具有独立功能的程序在数据集合上运行的过程，它是系统进行资源分配和调度的一个独立单位&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>所谓&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>创建进程，实质上是创建进程实体中的PCB&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>；而撤销进程，实质上是撤销进程实体中的PCB。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>一般情况下把进程实体简称为进程。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(64,13)" xlink:href="#imgnote"/>
        </g>
    </g>
    <symbol id="imgnote">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="42" id="104" transform="matrix(1,0,0,1,1488,850.84)" ed:width="116" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L112,0C114.7,0,116,1.3,116,4L116,38C116,40.7,114.7,42,112,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">组织形式</tspan>
        </text>
    </g>
    <g ed:height="42" id="106" transform="matrix(1,0,0,1,1488,986.72)" ed:width="78" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L74,0C76.7,0,78,1.3,78,4L78,38C78,40.7,76.7,42,74,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">特征</tspan>
        </text>
    </g>
    <g ed:height="42" id="108" transform="matrix(1,0,0,1,1488,621.22)" ed:width="99" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L95,0C97.7,0,99,1.3,99,4L99,38C99,40.7,97.7,42,95,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">组成</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>老师说主要还是按书上说法！&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>这部分在csapp书上也有点噢~&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(64,13)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="110" transform="matrix(1,0,0,1,1614,353.84)" ed:width="434" ed:parentid="102" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L434,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程是进程实体的运行过程，是系统进行资源分配和调度的一个独立单位</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="112" transform="matrix(1,0,0,1,1614,567.34)" ed:width="204" ed:parentid="108" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L204,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgstar3"/>
        </g>
        <text class="st15">
            <tspan x="27" style="white-space:pre" y="16">Process Control Block</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>系统为每个运行的程序配置一个数据结构，用来描述进程的各种信息（如程序代码存放的位置）&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>进程实体（进程映像）=PCB+程序段+数据段&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑'; color:#c00000;&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>操作系统通过PCB来管理进程，因此PCB中应该包含操作系统对其进行管理所需的各种信息&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>（进程的管理者所需的数据都在PCB中，&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>只要和进程管理有关的数据都在PCB中&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>）&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>PCB所包含的信息还有其他的分类方式，比如&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 进程标识符&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. 处理机状态&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 进程调度信息&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>4. 进程控制信息&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(178,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <symbol id="imgstar3">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="24.75" id="114" transform="matrix(1,0,0,1,1845,489.22)" ed:width="96" ed:parentid="112" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程描述信息</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="116" transform="matrix(1,0,0,1,1845,551.72)" ed:width="135" ed:parentid="112" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程控制和调度信息</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="118" transform="matrix(1,0,0,1,1845,614.22)" ed:width="96" ed:parentid="112" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">资源分配清单</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="120" transform="matrix(1,0,0,1,1845,661.09)" ed:width="109" ed:parentid="112" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">处理机状态信息</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="122" transform="matrix(1,0,0,1,1614,692.34)" ed:width="57" ed:parentid="108" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">代码段</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="124" transform="matrix(1,0,0,1,1614,723.59)" ed:width="57" ed:parentid="108" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">数据段</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="128" transform="matrix(1,0,0,1,1698,692.34)" ed:width="148" ed:parentid="122" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">存放要执行的程序代码</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="130" transform="matrix(1,0,0,1,1698,723.59)" ed:width="325" ed:parentid="124" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L325,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">存放全局或静态已初始化的变量（静态内存分配）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; font-weight:600; color:#454545;&quot;>存放程序运行过程中处理的各种数据&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>如全局变量、局部变量、宏定义啥的&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>（上面是王道上的，和书上不一样，老师说按书上来）&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(299,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="132" transform="matrix(1,0,0,1,1631,843.84)" ed:width="91" ed:parentid="104" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">连接方式</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>执行指针&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>：指向当前处于&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>运行态&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>的进程&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>就绪队列指&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>针：当前处于&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>就绪态&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>的进程&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>阻塞队列指针&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>：很多操作系统还会根据阻塞原因不同，再分为多个&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>阻塞队列&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="134" transform="matrix(1,0,0,1,1631,875.09)" ed:width="70" ed:parentid="104" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">索引方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="136" transform="matrix(1,0,0,1,1749,843.84)" ed:width="409" ed:parentid="132" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L409,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">按进程状态将PCB分为多个队列</tspan>
            <tspan style="white-space:pre" class="st18">，操作系统持有指向各个队列的指针</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="138" transform="matrix(1,0,0,1,1728,875.09)" ed:width="318" ed:parentid="134" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L318,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">按照</tspan>
            <tspan style="white-space:pre" class="st19">进程状态</tspan>
            <tspan style="white-space:pre">建立几张</tspan>
            <tspan style="white-space:pre" class="st19">索引表</tspan>
            <tspan style="white-space:pre">，各表项指向一个PCB</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="140" transform="matrix(1,0,0,1,1593,932.84)" ed:width="434" ed:parentid="106" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L434,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">动态性（</tspan>
            <tspan style="white-space:pre" class="st19">最基本的特征</tspan>
            <tspan style="white-space:pre">）：动态地产生、变化和消亡，有自己的生命周期</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="142" transform="matrix(1,0,0,1,1593,964.09)" ed:width="57" ed:parentid="106" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">并发性</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="144" transform="matrix(1,0,0,1,1593,995.34)" ed:width="57" ed:parentid="106" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">独立性</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="146" transform="matrix(1,0,0,1,1593,1026.59)" ed:width="57" ed:parentid="106" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">异步性</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="148" transform="matrix(1,0,0,1,1593,1057.84)" ed:width="57" ed:parentid="106" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">结构性</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="150" transform="matrix(1,0,0,1,1677,1026.59)" ed:width="395" ed:parentid="146" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L395,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">各进程以不可预知的速度向前推进，可能导致运行结果的不确定性</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="154" transform="matrix(1,0,0,1,1677,995.34)" ed:width="265" ed:parentid="144" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L265,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程是系统进行资源分配、调度的独立单位</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="166" transform="matrix(1,0,0,1,1968,473.59)" ed:width="171" ed:parentid="114" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L171,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程标识符PID（唯一的）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="168" transform="matrix(1,0,0,1,1968,504.84)" ed:width="107" ed:parentid="114" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L107,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">用户标识符UID</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="170" transform="matrix(1,0,0,1,2007,536.09)" ed:width="96" ed:parentid="116" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16" class="st18">进程</tspan>
            <tspan style="white-space:pre">当前状态</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="172" transform="matrix(1,0,0,1,2007,567.34)" ed:width="83" ed:parentid="116" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16" class="st18">进程</tspan>
            <tspan style="white-space:pre">优先级</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="174" transform="matrix(1,0,0,1,1981,661.09)" ed:width="130" ed:parentid="120" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L130,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">各种寄存器的值</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>当进程切换时需要把进程当前的运行状况记录下来保存在PCB中&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(104,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="176" transform="matrix(1,0,0,1,1968,598.59)" ed:width="161" ed:parentid="118" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L161,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">程序段指针、数据段指针</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="184" transform="matrix(1,0,0,1,1968,629.84)" ed:width="213" ed:parentid="118" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L213,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">如打印机、键盘、鼠标等设备资源</tspan>
        </text>
    </g>
    <g ed:height="29" id="195" transform="matrix(1,0,0,1,2049,705.84)" ed:width="158" ed:parentid="194" ed:layout="rightmap">
        <path stroke="#f8ae1a" d="M4,0L154,0C156.7,0,158,1.3,158,4L158,25C158,27.7,156.7,29,154,29L4,29C1.3,29,0,27.7,0,25L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" fill="#fef2e7"/>
        <text class="st15">
            <tspan x="6" style="white-space:pre" y="18.4">程序本身运行所需的数据</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="196" transform="matrix(1,0,0,1,1677,964.09)" ed:width="382" ed:parentid="142" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L382,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">内存中有多个进程实体，各个进程可并发执行，并且会相互制约</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="198" transform="matrix(1,0,0,1,1677,1057.84)" ed:width="401" ed:parentid="148" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L401,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">每个进程都会配置一个PCB，结构上，进程=程序段+数字段+PCB</tspan>
        </text>
    </g>
    <g ed:height="42" id="204" transform="matrix(1,0,0,1,1147,1148.04)" ed:width="99" ed:parentid="101" ed:layout="leftmap">
        <path stroke="#6b74b7" d="M4,0L95,0C97.7,0,99,1.3,99,4L99,38C99,40.7,97.7,42,95,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">通信</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>顾名思义，就是进程之间的&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>信息交换&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>进程是分配系统资源的单位（包括内存地址空间），因此&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>各进程&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>拥有&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>内存地址空间相互独立&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，且一个进程不能直接访问另一个进程的地址空间&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>进程间的数据交换以格式化的消息为单位。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>进程通过操作系统提供的“发送/接收消息”两个&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>原语&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>进行数据交换&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>消息 = 消息头（发送进程的ID、接收进程的ID、消息类型、消息长度等）+ 消息体&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(64,13)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="42" id="206" transform="matrix(1,0,0,1,1488,1192.09)" ed:width="99" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L95,0C97.7,0,99,1.3,99,4L99,38C99,40.7,97.7,42,95,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">状态</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>书P73页的五状态模型。（当然也有七状态的啦）&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(64,13)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="208" transform="matrix(1,0,0,1,1614,1122.59)" ed:width="78" ed:parentid="206" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L78,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">运行态</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>单核CPU每个时刻最多只有一个进程处于运行态；&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>双核CPU可以同时又两个进程处于运行态&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(52,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="210" transform="matrix(1,0,0,1,1614,1285.84)" ed:width="147" ed:parentid="206" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L147,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">状态转换图（书P73）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="216" transform="matrix(1,0,0,1,1614,1153.84)" ed:width="78" ed:parentid="206" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L78,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">就绪态</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>万事俱备，只差CPU&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(52,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="218" transform="matrix(1,0,0,1,1614,1185.09)" ed:width="57" ed:parentid="206" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">阻塞态</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="220" transform="matrix(1,0,0,1,1614,1223.34)" ed:width="57" ed:parentid="206" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">创建态</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="222" transform="matrix(1,0,0,1,1614,1254.59)" ed:width="57" ed:parentid="206" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">终止态</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="224" transform="matrix(1,0,0,1,1719,1122.59)" ed:width="155" ed:parentid="208" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L155,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">CPU√，其他所需资源√</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="236" transform="matrix(1,0,0,1,1719,1153.84)" ed:width="156" ed:parentid="216" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L156,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">CPU×，其他所需资源√</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="238" transform="matrix(1,0,0,1,1698,1185.09)" ed:width="157" ed:parentid="218" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L157,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">CPU×，其他所需资源×</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="240" transform="matrix(1,0,0,1,1698,1223.34)" ed:width="292" ed:parentid="220" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L292,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">操作系统为新进程分配资源、创建并初始化PCB</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="242" transform="matrix(1,0,0,1,1698,1254.59)" ed:width="227" ed:parentid="222" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L227,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">操作系统回收进程的资源、撤销PCB</tspan>
        </text>
    </g>
    <g ed:height="42" id="247" transform="matrix(1,0,0,1,1168,452.33)" ed:width="78" ed:parentid="101" ed:layout="leftmap">
        <path stroke="#6b74b7" d="M4,0L74,0C76.7,0,78,1.3,78,4L78,38C78,40.7,76.7,42,74,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">控制</tspan>
        </text>
    </g>
    <g ed:height="127.051" style="display:none" id="250" transform="matrix(1,0,0,1,1788,1294.26)" ed:width="274" ed:parentid="210" ed:layout="rightmap">
        <path stroke="#002060" d="M0,127.1L274,127.1" stroke-linejoin="round" fill="none"/>
        <image x="0" preserveAspectRatio="none" transform="translate(7,2.75)" y="0" width="260" xlink:href="进程.html.files/image5.png" height="122"/>
    </g>
    <g ed:height="24.75" id="256" transform="matrix(1,0,0,1,1071,145.15)" ed:width="70" ed:parentid="247" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">基本概念</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="258" transform="matrix(1,0,0,1,1029,1006.54)" ed:width="91" ed:parentid="204" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">共享存储</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>操作系统只负责提供共享空间和同步互斥工具&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="260" transform="matrix(1,0,0,1,1050,601.74)" ed:width="91" ed:parentid="247" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">相关原语</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 找到相应PCB&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. 更新PCB中的信息（修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境）&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>  a. 所有的进程控制原语&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>一定修改进程状态标志&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>  b. &lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>剥夺当前运行进程的CPU使用权必然需要保存其运行环境&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>  c. 某进程&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>开始运行前必然要恢复其运行环境&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 将PCB插入合适队列&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>4. 分配/回收资源&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="262" transform="matrix(1,0,0,1,953,343.5)" ed:width="70" ed:parentid="260" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程创建</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="264" transform="matrix(1,0,0,1,953,458.55)" ed:width="70" ed:parentid="260" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程终止</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="266" transform="matrix(1,0,0,1,953,582.93)" ed:width="70" ed:parentid="260" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程阻塞</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="268" transform="matrix(1,0,0,1,953,707.3)" ed:width="70" ed:parentid="260" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程唤醒</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="270" transform="matrix(1,0,0,1,953,841.17)" ed:width="70" ed:parentid="260" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程切换</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="272" transform="matrix(1,0,0,1,883,170.28)" ed:width="161" ed:parentid="256" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L161,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程控制是用</tspan>
            <tspan style="white-space:pre" class="st19">原语</tspan>
            <tspan style="white-space:pre">实现的</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="274" transform="matrix(1,0,0,1,642,239.06)" ed:width="214" ed:parentid="272" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L214,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">用</tspan>
            <tspan style="white-space:pre" class="st19">开/关中断（中断屏蔽）</tspan>
            <tspan style="white-space:pre">实现</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>开关中断期间若有外部中断信号来，是不会搭理他的&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(188,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="43.75" id="276" transform="matrix(1,0,0,1,675,20)" ed:width="369" ed:parentid="256" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,43.8L369,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程控制的主要功能是对系统中的所有进程实施有效的管理，</tspan>
            <tspan x="8" style="white-space:pre" y="35">它具有创建新进程、销毁已有进程、</tspan>
            <tspan style="white-space:pre" class="st19">实现进程转换</tspan>
            <tspan style="white-space:pre">等功能</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="278" transform="matrix(1,0,0,1,578,270.31)" ed:width="278" ed:parentid="272" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L278,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">其执行必须</tspan>
            <tspan style="white-space:pre" class="st19">一气呵成、不可中断（原子操作）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="280" transform="matrix(1,0,0,1,656,139.03)" ed:width="200" ed:parentid="272" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L200,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">是一种运行在核心态的特殊程序</tspan>
        </text>
    </g>
    <g ed:height="29" id="283" transform="matrix(1,0,0,1,432,638.3)" ed:width="67" ed:parentid="282" ed:layout="leftmap">
        <path stroke="#f8ae1a" d="M4,0L63,0C65.7,0,67,1.3,67,4L67,25C67,27.7,65.7,29,63,29L4,29C1.3,29,0,27.7,0,25L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" fill="#fef2e7"/>
        <text class="st15">
            <tspan x="6" style="white-space:pre" y="18.4">成对出现</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="284" transform="matrix(1,0,0,1,835,584.17)" ed:width="91" ed:parentid="266" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">阻塞原语</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 找到要阻塞的进程对应的PCB&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. 保护进程运行状态，将PCB状态信息设置为“阻塞态”，暂时停止进程运行&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 将PCB插入相应事件的等待队列&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="286" transform="matrix(1,0,0,1,835,717.92)" ed:width="91" ed:parentid="268" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">唤醒原语</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 在事件等待队列中找到PCB&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. 将PCB从等待队列移除，设置进程为就绪态&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 将PCB插入就绪队列，等待被调度&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="162.309" id="288" transform="matrix(1,0,0,1,355,70.25)" ed:width="274" ed:parentid="280" ed:layout="leftmap">
        <path stroke="#002060" d="M0,162.3L274,162.3" stroke-linejoin="round" fill="none"/>
        <image x="0" preserveAspectRatio="none" transform="translate(7,2.75)" y="0" width="260" xlink:href="进程.html.files/image6.png" height="157"/>
    </g>
    <g ed:height="24.75" id="291" transform="matrix(1,0,0,1,835,354.18)" ed:width="91" ed:parentid="262" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">创建原语</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 申请空白PCB&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. 为新进程分配所需资源&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 初始化PCB&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>4. 将PCB插入就绪队列&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="293" transform="matrix(1,0,0,1,791,385.43)" ed:width="135" ed:parentid="262" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">引起进程创建的事件</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="295" transform="matrix(1,0,0,1,835,469.18)" ed:width="91" ed:parentid="264" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">撤销原语</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 从PCB集合中找到要终止进程的PCB&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. 若进程正在运行，立即剥夺CPU，将CPU分配给其他进程&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 终止其所有子进程&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>4. 将该进程拥有的所有资源归还给父进程或操作系统&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>5. 删除PCB&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="297" transform="matrix(1,0,0,1,791,500.43)" ed:width="135" ed:parentid="264" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">引起进程终止的事件</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="299" transform="matrix(1,0,0,1,499,385.56)" ed:width="265" ed:parentid="293" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L265,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">用户登录、作业调度、提供服务、应用请求</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="308" transform="matrix(1,0,0,1,473,500.55)" ed:width="291" ed:parentid="297" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L291,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">正常结束、异常结束、外界干预（任务管理器）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="312" transform="matrix(1,0,0,1,791,749.17)" ed:width="135" ed:parentid="268" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">引起进程唤醒的事件</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="314" transform="matrix(1,0,0,1,791,624.8)" ed:width="135" ed:parentid="266" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">引起进程阻塞的事件</tspan>
        </text>
    </g>
    <g ed:height="43.5" id="316" transform="matrix(1,0,0,1,525,615.42)" ed:width="239" ed:parentid="314" ed:layout="leftmap">
        <path stroke="#002060" d="M0,43.5L239,43.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">需要等待系统分配某种资源</tspan>
            <tspan x="8" style="white-space:pre" y="35.1">需要等待相互合作的其他进程完成工作</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="318" transform="matrix(1,0,0,1,616,749.29)" ed:width="148" ed:parentid="312" ed:layout="leftmap">
        <path stroke="#002060" d="M0,24.5L148,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">阻塞时等待的事件发生</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="320" transform="matrix(1,0,0,1,835,851.91)" ed:width="91" ed:parentid="270" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L91,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">切换原语</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>1. 将运行环境信息存入PCB&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>2. PCB移入相应队列&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>3. 选择另一进程执行，并更新其PCB&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>4. 根据PCB恢复进程所需的运行环境&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(65,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="325" transform="matrix(1,0,0,1,791,892.54)" ed:width="135" ed:parentid="270" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">引起进程切换的事件</tspan>
        </text>
    </g>
    <g ed:height="43.5" id="326" transform="matrix(1,0,0,1,473,883.16)" ed:width="291" ed:parentid="325" ed:layout="leftmap">
        <path stroke="#002060" d="M0,43.5L291,43.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">当前进程时间片到、有更高优先级的进程到达、</tspan>
            <tspan x="8" style="white-space:pre" y="35.1">当前进程主动阻塞、当前进程终止</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="332" transform="matrix(1,0,0,1,1050,1156.66)" ed:width="70" ed:parentid="204" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">管道通信</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="334" transform="matrix(1,0,0,1,1050,1306.79)" ed:width="70" ed:parentid="204" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">消息传递</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="336" transform="matrix(1,0,0,1,880,959.66)" ed:width="122" ed:parentid="258" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L122,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">设置一个共享空间</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="338" transform="matrix(1,0,0,1,854,990.91)" ed:width="148" ed:parentid="258" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">要</tspan>
            <tspan style="white-space:pre" class="st19">互斥地访问</tspan>
            <tspan style="white-space:pre">共享空间</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="340" transform="matrix(1,0,0,1,932,1037.79)" ed:width="70" ed:parentid="258" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">两种方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="342" transform="matrix(1,0,0,1,757,1022.16)" ed:width="148" ed:parentid="340" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">基于数据结构（低级）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="344" transform="matrix(1,0,0,1,710,1053.41)" ed:width="195" ed:parentid="340" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L195,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">基于存储区的共享（高级）</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>在内存中划出一块共享存储区，数据的形式、存放位置都由进程控制，而不是操作系统。相比之下，这种&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>共享发生速度更快&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(169,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="346" transform="matrix(1,0,0,1,680,1084.66)" ed:width="343" ed:parentid="332" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L343,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">设置一个特殊的</tspan>
            <tspan style="white-space:pre" class="st19">共享文件（管道）</tspan>
            <tspan style="white-space:pre">，其实就是一个缓冲区</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="348" transform="matrix(1,0,0,1,836,1115.91)" ed:width="187" ed:parentid="332" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L187,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">一个管道只能实现</tspan>
            <tspan style="white-space:pre" class="st19">半双工通信</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="350" transform="matrix(1,0,0,1,810,1147.16)" ed:width="213" ed:parentid="332" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L213,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">实现双向同时通信要建立两个管道</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="352" transform="matrix(1,0,0,1,875,1178.41)" ed:width="148" ed:parentid="332" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">各进程要</tspan>
            <tspan style="white-space:pre" class="st19">互斥访问</tspan>
            <tspan style="white-space:pre">管道</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="354" transform="matrix(1,0,0,1,789,1209.66)" ed:width="234" ed:parentid="332" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,43.8L234,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">写满时不能再写，读空时不能再读</tspan>
            <tspan x="8" style="white-space:pre" y="35">没写满不能读，没读空不能写</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>数据一旦被读出就从管道中被抛弃，这意味着&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>读进程最多只能有一个&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，否则可能会有读错数据的情况&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(208,14)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="358" transform="matrix(1,0,0,1,791,1259.91)" ed:width="232" ed:parentid="334" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L232,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">传递结构化的消息（消息头/消息体）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="360" transform="matrix(1,0,0,1,953,1338.04)" ed:width="70" ed:parentid="334" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">两种方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="362" transform="matrix(1,0,0,1,843,1291.16)" ed:width="180" ed:parentid="334" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L180,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">系统提供“发送/接受原语”</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="364" transform="matrix(1,0,0,1,830,1322.41)" ed:width="96" ed:parentid="360" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">直接通信方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="366" transform="matrix(1,0,0,1,778,1353.66)" ed:width="148" ed:parentid="360" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">间接（信箱）通信方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="368" transform="matrix(1,0,0,1,551,1322.41)" ed:width="252" ed:parentid="364" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L252,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16">消息直接挂到接收进程的消息缓冲队列上</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="370" transform="matrix(1,0,0,1,577,1353.66)" ed:width="174" ed:parentid="366" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L174,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16">消息先发到中间体（信箱）</tspan>
        </text>
    </g>
    <g ed:height="42" id="416" transform="matrix(1,0,0,1,1488,1958.09)" ed:width="78" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L74,0C76.7,0,78,1.3,78,4L78,38C78,40.7,76.7,42,74,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">线程</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="418" transform="matrix(1,0,0,1,1593,1732.34)" ed:width="174" ed:parentid="416" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L174,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">什么是线程，什么引入线程</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="420" transform="matrix(1,0,0,1,1593,1826.09)" ed:width="208" ed:parentid="416" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L208,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">引入线程机制后，有什么变化</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>还没引入线程之前，系统中各个程序只能串行执行。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>传统的进程是程序执行流的最小单位。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>但引入线程后，&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>线程&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>成为了&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>程序执行的最小单位&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>进程&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>只作为&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>除CPU之外的系统资源的分配单元&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(182,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="422" transform="matrix(1,0,0,1,1593,2044.84)" ed:width="128" ed:parentid="416" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L128,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgflag2"/>
        </g>
        <text class="st15">
            <tspan x="27" style="white-space:pre" y="16">线程的实现方式</tspan>
        </text>
    </g>
    <symbol id="imgflag2">
        <image width="16" xlink:href="" height="16"/>
    </symbol>
    <g ed:height="24.75" id="426" transform="matrix(1,0,0,1,1593,2169.84)" ed:width="102" ed:parentid="416" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L102,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgflag2"/>
        </g>
        <text class="st15">
            <tspan x="27" style="white-space:pre" y="16">多线程模型</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="428" transform="matrix(1,0,0,1,1794,1732.34)" ed:width="161" ed:parentid="418" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L161,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">可理解为“轻量级进程”</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="430" transform="matrix(1,0,0,1,1794,1763.59)" ed:width="226" ed:parentid="418" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L226,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16" class="st19">可增加并发度</tspan>
            <tspan style="white-space:pre">，减少并发带来的开销</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="432" transform="matrix(1,0,0,1,1828,1794.84)" ed:width="148" ed:parentid="420" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">资源分配、处理机调度</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="434" transform="matrix(1,0,0,1,1828,1826.09)" ed:width="169" ed:parentid="420" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L169,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程和线程都可以并发</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>一个进程内可以&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>并发&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>处理各种任务&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(143,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="436" transform="matrix(1,0,0,1,1828,1857.34)" ed:width="187" ed:parentid="420" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L187,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">（实现并发的）系统开销减小</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="438" transform="matrix(1,0,0,1,1748,2013.59)" ed:width="104" ed:parentid="422" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L104,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">用户级线程</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>线程切换在用户态即可完成，无需操作系统干预&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，系统也意识不到线程的存在&#x9;&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(78,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="440" transform="matrix(1,0,0,1,1748,2044.84)" ed:width="104" ed:parentid="422" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L104,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">内核级线程</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>线程管理工作由&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>操作系统内核&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>完成。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(78,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="442" transform="matrix(1,0,0,1,1748,2076.09)" ed:width="70" ed:parentid="422" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">组合方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="444" transform="matrix(1,0,0,1,1879,2013.59)" ed:width="382" ed:parentid="438" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L382,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">从用户视角看的线程，线程管理交给应用程序，对操作系统透明</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="450" transform="matrix(1,0,0,1,1593,1935.47)" ed:width="148" ed:parentid="416" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">线程有哪些重要的属性</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="452" transform="matrix(1,0,0,1,1768,1888.59)" ed:width="304" ed:parentid="450" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L304,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">线程是处理机调度的单位，进程是资源分配的单位</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="454" transform="matrix(1,0,0,1,1768,1951.09)" ed:width="390" ed:parentid="450" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L390,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">线程几乎不拥有资源，</tspan>
            <tspan style="white-space:pre" class="st19">同一进程的各线程共享进程拥有的资源</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>也由于&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>共享内存地址空间&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，同一进程中的&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>线程间通信甚至无需系统干预&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(364,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="456" transform="matrix(1,0,0,1,1768,1982.34)" ed:width="395" ed:parentid="450" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L395,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">同一进程内的线程切换不会导致进程切换，则不需要切换进程环境</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="458" transform="matrix(1,0,0,1,1879,2044.84)" ed:width="382" ed:parentid="440" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L382,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16" class="st18">从操作系统视角看的进程（</tspan>
            <tspan style="white-space:pre">内核级线程才是处理机分配的单位</tspan>
            <tspan style="white-space:pre" class="st18">）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="460" transform="matrix(1,0,0,1,1845,2076.09)" ed:width="135" ed:parentid="442" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L135,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">上述两种方式的结合</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="462" transform="matrix(1,0,0,1,1722,2122.97)" ed:width="83" ed:parentid="426" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">多对一模型</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="464" transform="matrix(1,0,0,1,1722,2185.47)" ed:width="83" ed:parentid="426" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">一对一模型</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="466" transform="matrix(1,0,0,1,1722,2232.34)" ed:width="83" ed:parentid="426" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">多对多模型</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="468" transform="matrix(1,0,0,1,1832,2107.34)" ed:width="187" ed:parentid="462" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L187,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">优：进程管理</tspan>
            <tspan style="white-space:pre" class="st19">开销小、效率高</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="470" transform="matrix(1,0,0,1,1832,2138.59)" ed:width="343" ed:parentid="462" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L343,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">缺：一个线程阻塞会导致整个进程都被阻塞（并发度低）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="474" transform="matrix(1,0,0,1,1832,2169.84)" ed:width="330" ed:parentid="464" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L330,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">优：各个线程可分配到多核处理机并行执行，</tspan>
            <tspan style="white-space:pre" class="st19">并发度高</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="476" transform="matrix(1,0,0,1,1832,2232.34)" ed:width="265" ed:parentid="466" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L265,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">集上述二者之长：</tspan>
            <tspan style="white-space:pre" class="st19">并发度高、开销也不太大</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="484" transform="matrix(1,0,0,1,1794,1701.09)" ed:width="332" ed:parentid="418" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L332,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">一个基本的CPU执行单元，也是程序执行流的最小单位</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="486" transform="matrix(1,0,0,1,1768,1919.84)" ed:width="487" ed:parentid="450" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L487,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">每个线程都有一个线程ID、线程控制卡TCB，也有就绪、阻塞、运行三种基本状态</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="495" transform="matrix(1,0,0,1,1832,2201.09)" ed:width="291" ed:parentid="464" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L291,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">缺：</tspan>
            <tspan style="white-space:pre" class="st19">线程切换由操作系统完成</tspan>
            <tspan style="white-space:pre">，线程管理开销大</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="508" transform="matrix(1,0,0,1,1614,754.84)" ed:width="44" ed:parentid="108" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L44,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">栈段</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="510" transform="matrix(1,0,0,1,1685,754.84)" ed:width="117" ed:parentid="508" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L117,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">存放临时数据</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-size:10pt; color:#454545;&quot;>如函数参数、返回地址和局部变量&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(91,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="512" transform="matrix(1,0,0,1,1614,786.09)" ed:width="57" ed:parentid="108" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">还有堆</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="514" transform="matrix(1,0,0,1,1698,786.09)" ed:width="148" ed:parentid="512" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">运行期间动态分配内存</tspan>
        </text>
    </g>
    <g ed:height="48" id="517" transform="matrix(1,0,0,1,2233,586.97)" ed:width="67" ed:parentid="516" ed:layout="rightmap">
        <path stroke="#f8ae1a" d="M4,0L63,0C65.7,0,67,1.3,67,4L67,44C67,46.7,65.7,48,63,48L4,48C1.3,48,0,46.7,0,44L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" fill="#fef2e7"/>
        <text class="st14">
            <tspan x="6" style="white-space:pre" y="18.4">进程实体</tspan>
            <tspan x="6" style="white-space:pre" y="37.5">进程映像</tspan>
        </text>
    </g>
    <g ed:height="143.892" style="display:none" id="518" transform="matrix(1,0,0,1,2185,784.27)" ed:width="274" ed:parentid="136" ed:layout="rightmap">
        <path stroke="#002060" d="M0,143.9L274,143.9" stroke-linejoin="round" fill="none"/>
        <image x="0" preserveAspectRatio="none" transform="translate(7,2.75)" y="0" width="260" xlink:href="进程.html.files/image7.png" height="138"/>
    </g>
    <g ed:height="42" id="525" transform="matrix(1,0,0,1,1488,1484.84)" ed:width="116" ed:parentid="101" ed:layout="rightmap">
        <path stroke="#6b74b7" d="M4,0L112,0C114.7,0,116,1.3,116,4L116,38C116,40.7,114.7,42,112,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">同步互斥</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="527" transform="matrix(1,0,0,1,1631,1352.97)" ed:width="70" ed:parentid="525" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程同步</tspan>
        </text>
    </g>
    <g ed:height="43.5" id="529" transform="matrix(1,0,0,1,1728,1343.59)" ed:width="499" ed:parentid="527" ed:layout="rightmap">
        <path stroke="#002060" d="M0,43.5L499,43.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">并发性带来了异步性，有时需要通过进程同步解决这种异步问题</tspan>
            <tspan x="8" style="white-space:pre" y="35.1" class="st20">有的进程之间需要相互配合地完成工作，各进程的工作推进需要遵循一定的先后顺序</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="531" transform="matrix(1,0,0,1,1631,1518.47)" ed:width="70" ed:parentid="525" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程互斥</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="539" transform="matrix(1,0,0,1,1728,1393.59)" ed:width="499" ed:parentid="531" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L499,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1" class="st21">对临界资源的访问，需要互斥的进行</tspan>
            <tspan style="white-space:pre">。即同一时间段内只能允许一个进程访问该资源</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="535" transform="matrix(1,0,0,1,1728,1471.47)" ed:width="70" ed:parentid="531" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">四个部分</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="537" transform="matrix(1,0,0,1,1728,1596.47)" ed:width="109" ed:parentid="531" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">需要遵循的原则</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="541" transform="matrix(1,0,0,1,1825,1424.59)" ed:width="57" ed:parentid="535" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进入区</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="543" transform="matrix(1,0,0,1,1825,1455.84)" ed:width="57" ed:parentid="535" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">临界区</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="545" transform="matrix(1,0,0,1,1825,1487.09)" ed:width="57" ed:parentid="535" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">退出区</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="547" transform="matrix(1,0,0,1,1825,1518.34)" ed:width="57" ed:parentid="535" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L57,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">剩余区</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="549" transform="matrix(1,0,0,1,1909,1424.72)" ed:width="304" ed:parentid="541" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L304,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">检查是否可进入临界区，若可进入，需要“上锁”</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="551" transform="matrix(1,0,0,1,1909,1455.97)" ed:width="161" ed:parentid="543" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L161,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">访问临界资源的那段代码</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="555" transform="matrix(1,0,0,1,1909,1487.22)" ed:width="96" ed:parentid="545" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L96,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">负责“解锁”</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="557" transform="matrix(1,0,0,1,1909,1518.47)" ed:width="96" ed:parentid="547" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L96,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">其余代码部分</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="559" transform="matrix(1,0,0,1,1864,1549.59)" ed:width="70" ed:parentid="537" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">空闲让进</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="561" transform="matrix(1,0,0,1,1864,1580.84)" ed:width="70" ed:parentid="537" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">忙则等待</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="563" transform="matrix(1,0,0,1,1864,1612.09)" ed:width="70" ed:parentid="537" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">有限等待</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="565" transform="matrix(1,0,0,1,1864,1643.34)" ed:width="70" ed:parentid="537" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">让权等待</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="567" transform="matrix(1,0,0,1,1961,1549.72)" ed:width="226" ed:parentid="559" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L226,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">临界区空闲时，应允许一个进程访问</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="569" transform="matrix(1,0,0,1,1961,1580.97)" ed:width="317" ed:parentid="561" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L317,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">临界区正在被访问时，其他范围访问的进程需要等待</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="571" transform="matrix(1,0,0,1,1961,1612.22)" ed:width="265" ed:parentid="563" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L265,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">要在有限时间内进入临界区，保证不会饥饿</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="573" transform="matrix(1,0,0,1,1961,1643.47)" ed:width="291" ed:parentid="565" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L291,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st14">
            <tspan x="8" style="white-space:pre" y="16.1">进不了临界区的进程，要释放处理机，防止忙等</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="587" transform="matrix(1,0,0,1,1614,400.47)" ed:width="122" ed:parentid="102" ed:layout="rightmap">
        <path stroke="#435fbc" d="M0,24.8L122,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">程序和进程的区别</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="590" transform="matrix(1,0,0,1,1763,385.09)" ed:width="226" ed:parentid="587" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L226,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16.1" class="st22">程序就是一个指令序列，是</tspan>
            <tspan style="white-space:pre">静态</tspan>
            <tspan style="white-space:pre" class="st22">的。</tspan>
        </text>
    </g>
    <g ed:height="24.5" id="592" transform="matrix(1,0,0,1,1763,416.09)" ed:width="330" ed:parentid="587" ed:layout="rightmap">
        <path stroke="#002060" d="M0,24.5L330,24.5" stroke-linejoin="round" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16.1" class="st22">而进程是程序在处理机上的一次执行过程，是</tspan>
            <tspan style="white-space:pre">动态</tspan>
            <tspan style="white-space:pre" class="st22">的。</tspan>
        </text>
    </g>
    <g ed:height="42" id="654" transform="matrix(1,0,0,1,1168,1959.43)" ed:width="78" ed:parentid="101" ed:layout="leftmap">
        <path stroke="#6b74b7" d="M4,0L74,0C76.7,0,78,1.3,78,4L78,38C78,40.7,76.7,42,74,42L4,42C1.3,42,0,40.7,0,38L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="18" style="white-space:pre" y="26.9">调度</tspan>
        </text>
    </g>
    <g ed:height="32" id="655" transform="matrix(1,0,0,1,1024,1689.3)" ed:width="117" ed:parentid="654" ed:layout="leftmap">
        <path stroke="#6b74b7" d="M4,0L113,0C115.7,0,117,1.3,117,4L117,28C117,30.7,115.7,32,113,32L4,32C1.3,32,0,30.7,0,28L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="9" style="white-space:pre" y="21.9">概念、层次</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="656" transform="matrix(1,0,0,1,927,1411.41)" ed:width="70" ed:parentid="655" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">基本概念</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="657" transform="matrix(1,0,0,1,927,1542.8)" ed:width="70" ed:parentid="655" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">三个层次</tspan>
        </text>
    </g>
    <g ed:height="32" id="658" transform="matrix(1,0,0,1,1024,2261.56)" ed:width="117" ed:parentid="654" ed:layout="leftmap">
        <path stroke="#6b74b7" d="M4,0L113,0C115.7,0,117,1.3,117,4L117,28C117,30.7,115.7,32,113,32L4,32C1.3,32,0,30.7,0,28L0,4C0,1.3,1.3,0,4,0z" stroke-linejoin="round" stroke-width="2" fill="#ebecf3"/>
        <text class="st17">
            <tspan x="9" style="white-space:pre" y="21.9">时机、方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="659" transform="matrix(1,0,0,1,830,1824.31)" ed:width="167" ed:parentid="655" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L167,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <g transform="translate(7.13,3.13)">
            <use transform="translate(0,0)" xlink:href="#imgstar3"/>
        </g>
        <text class="st15">
            <tspan x="27" style="white-space:pre" y="16">三层调度的联系、对比</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="661" transform="matrix(1,0,0,1,547,1411.41)" ed:width="353" ed:parentid="656" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L353,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">按某种算法从就绪队列中选择一个进程将CPU分配给它</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>资源有限，按规则决定处理任务的顺序&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(327,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="662" transform="matrix(1,0,0,1,720,1442.66)" ed:width="180" ed:parentid="657" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L180,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16" class="st18">高级调度</tspan>
            <tspan style="white-space:pre">（作业/程序调度）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="663" transform="matrix(1,0,0,1,752,1542.8)" ed:width="148" ed:parentid="657" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16" class="st18">中级调度（</tspan>
            <tspan style="white-space:pre">内存调度</tspan>
            <tspan style="white-space:pre" class="st18">）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="664" transform="matrix(1,0,0,1,752,1642.94)" ed:width="148" ed:parentid="657" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L148,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16" class="st18">低级调度（</tspan>
            <tspan style="white-space:pre">进程调度</tspan>
            <tspan style="white-space:pre" class="st18">）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="665" transform="matrix(1,0,0,1,212,1442.66)" ed:width="481" ed:parentid="662" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L481,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16" class="st18">按照</tspan>
            <tspan style="white-space:pre">某种规则</tspan>
            <tspan style="white-space:pre" class="st18">，从</tspan>
            <tspan style="white-space:pre">后备队列</tspan>
            <tspan style="white-space:pre" class="st18">中选择合适的作业将其</tspan>
            <tspan style="white-space:pre">调入内存</tspan>
            <tspan style="white-space:pre" class="st18">，并为其创建进程</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>按一定原则&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>从外存上&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>处于后备队列的作业中挑选一个（或多个）作业，给它们分配内存等必要资源，并&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>建立相应的进程（建立PCB）&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，以使它（们）获得竞争处理机的权利。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>只有调入的时机需要操作系统来决定，作业调出是作业运行结束时，且会撤销PCB。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(455,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="666" transform="matrix(1,0,0,1,322,1527.18)" ed:width="403" ed:parentid="663" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L403,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16" class="st18">按照某种规则，从</tspan>
            <tspan style="white-space:pre">挂起队列</tspan>
            <tspan style="white-space:pre" class="st18">中选择合适的进程将其数据调回内存</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>引入虚拟存储技术，将暂时不能运行的进程调至外存等待。等它重新具备了运行条件且内存又稍有空闲时，再重新调入内存。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>这么做目的是为了&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>提高内存利用率&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>和&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>系统吞吐量&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>但注意&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>PCB不会被调到外存&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，因为PCB记录了进程数据在外存中存放的位置、进程状态等信息，OS还要通过它来保持对各个进程的监控、管理，当然也包括把它从外存调回内存~&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>而被挂起的进程PCB会被放到&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>挂起队列&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>中。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(377,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="667" transform="matrix(1,0,0,1,369,1642.94)" ed:width="356" ed:parentid="664" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L356,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">按照某种规则，从就</tspan>
            <tspan style="white-space:pre" class="st19">绪队列中选择</tspan>
            <tspan style="white-space:pre">一个进程为其分配处理机</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="668" transform="matrix(1,0,0,1,733,1705.44)" ed:width="70" ed:parentid="659" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">高级调度</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="669" transform="matrix(1,0,0,1,733,1808.69)" ed:width="70" ed:parentid="659" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">中级调度</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="670" transform="matrix(1,0,0,1,733,1927.56)" ed:width="70" ed:parentid="659" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">低级调度</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="671" transform="matrix(1,0,0,1,545,1674.19)" ed:width="161" ed:parentid="668" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L161,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">外存→内存（面向作业）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="672" transform="matrix(1,0,0,1,597,1705.44)" ed:width="109" ed:parentid="668" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">发生频率：最低</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="673" transform="matrix(1,0,0,1,545,1767.94)" ed:width="161" ed:parentid="669" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L161,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">内存→外存（面向进程）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="674" transform="matrix(1,0,0,1,597,1799.19)" ed:width="109" ed:parentid="669" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">发生频率：中等</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="675" transform="matrix(1,0,0,1,621,1880.69)" ed:width="85" ed:parentid="670" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L85,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">内存→CPU</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="676" transform="matrix(1,0,0,1,597,1911.94)" ed:width="109" ed:parentid="670" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">发生频率：最高</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="677" transform="matrix(1,0,0,1,569,1611.69)" ed:width="156" ed:parentid="663" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L156,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">补充知识，请看备注</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>为减轻系统负载，提高资源利用率，暂时不执行的进程会被调到外存从而变为&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>“挂起态”。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>七状态模型：在之前进程的五状态上加入了“就绪挂起”和“阻塞挂起”，预知详情，敬请百度&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(130,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="678" transform="matrix(1,0,0,1,454,1736.69)" ed:width="252" ed:parentid="668" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L252,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">对进程状态的影响：无→创建态→就绪态</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="679" transform="matrix(1,0,0,1,574,1830.44)" ed:width="132" ed:parentid="669" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,43.8L132,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">挂起态→就绪态</tspan>
            <tspan x="8" style="white-space:pre" y="35">(阻塞挂起→阻塞态)</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="680" transform="matrix(1,0,0,1,597,1943.19)" ed:width="109" ed:parentid="670" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L109,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">就绪态→运行态</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="681" transform="matrix(1,0,0,1,953,2130.69)" ed:width="44" ed:parentid="658" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L44,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">时机</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="682" transform="matrix(1,0,0,1,914,2333.81)" ed:width="83" ed:parentid="658" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L83,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">切换与过程</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="683" transform="matrix(1,0,0,1,953,2468.31)" ed:width="44" ed:parentid="658" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L44,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">方式</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="684" transform="matrix(1,0,0,1,830,2083.81)" ed:width="96" ed:parentid="681" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">需要进程调度</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="685" transform="matrix(1,0,0,1,804,2224.44)" ed:width="122" ed:parentid="681" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L122,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">不能进行进程调度</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="686" transform="matrix(1,0,0,1,733,2036.94)" ed:width="70" ed:parentid="684" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">主动放弃</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="687" transform="matrix(1,0,0,1,733,2130.69)" ed:width="70" ed:parentid="684" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">被动放弃</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="688" transform="matrix(1,0,0,1,655,2193.19)" ed:width="122" ed:parentid="685" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L122,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">处理中断的过程中</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="689" transform="matrix(1,0,0,1,543,2224.44)" ed:width="234" ed:parentid="685" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L234,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程在</tspan>
            <tspan style="white-space:pre" class="st19">操作系统内核程序临界区</tspan>
            <tspan style="white-space:pre">中</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>临界资源&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>：一个时间段内只允许一个进程使用的资源。各进程需要&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>互斥地&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>访问临界资源（类比打印机）&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>临界区&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>：访问临界资源的那段程序代码（例如要用打印机打印输出的话，就要把对打印机执行写操作的代码写在这个地方）&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>普通临界区访问的临界资源不会直接影响操作系统内核的管理工作。因此在访问普通临界区时可以进行调度和切换&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; font-weight:600;&quot;>内核程序临界区&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>：一般是用来访问某种&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>内核数据结构的&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>，比如进程就绪队列&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑';&quot;>举例，一个进程如果在内核程序临界区且要访问就绪队列，访问之前会对就绪队列上锁；当还没退出临界区就进行进程调度的话（进程调度也要访问就绪队列，但此时是上锁状态），就无法顺利进行调度。&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(208,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="690" transform="matrix(1,0,0,1,525,2255.69)" ed:width="252" ed:parentid="685" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L252,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">在原子操作过程中（原语，在进程那节）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="691" transform="matrix(1,0,0,1,610,2005.69)" ed:width="96" ed:parentid="686" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L96,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程正常终止</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="692" transform="matrix(1,0,0,1,532,2036.94)" ed:width="174" ed:parentid="686" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L174,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">运行过程中发生异常而终止</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="693" transform="matrix(1,0,0,1,494,2068.19)" ed:width="212" ed:parentid="686" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L212,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">进程主动请求阻塞（如 等待I/O）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="694" transform="matrix(1,0,0,1,545,2099.44)" ed:width="161" ed:parentid="687" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L161,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">分给进程的时间片用完了</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="695" transform="matrix(1,0,0,1,455,2130.69)" ed:width="251" ed:parentid="687" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L251,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">有更紧急的事情需要处理（如 I/O中断）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="696" transform="matrix(1,0,0,1,493,2161.94)" ed:width="213" ed:parentid="687" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L213,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">有更高优先级的进程进入就绪队列</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="697" transform="matrix(1,0,0,1,588,2286.94)" ed:width="299" ed:parentid="682" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L299,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">狭义的“调度”和“切换”的区别，请看注释</tspan>
        </text>
        <g ed:note="&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>狭义的进程调度&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>指的是从就绪队列中&lt;/span>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>选中一个要运行的进程&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>。&lt;/span>&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>进程切换&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>指的是一个进程让出CPU，由另一个进程占用CPU的过程。（可以去回顾进程切换的过程）&lt;/span>&lt;/p>&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;  font-family:'微软雅黑';&quot;>&lt;br />&lt;/p>&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; &quot;>&lt;span style=&quot; font-family:'微软雅黑'; color:#c00000;&quot;>广义的进程调度&lt;/span>&lt;span style=&quot; font-family:'微软雅黑';&quot;>包含了选择一个进程和进程切换两个步骤&lt;/span>&lt;/p>&lt;/body>">
            <use transform="translate(273,4)" xlink:href="#imgnote"/>
        </g>
    </g>
    <g ed:height="24.75" id="698" transform="matrix(1,0,0,1,817,2333.81)" ed:width="70" ed:parentid="682" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L70,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">切换过程</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="699" transform="matrix(1,0,0,1,440,2380.69)" ed:width="447" ed:parentid="682" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L447,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">重要结论：进程调度、切换是有代价的，并不是调度越频繁，并发度就越高</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="700" transform="matrix(1,0,0,1,590,2318.19)" ed:width="200" ed:parentid="698" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L200,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">对原来运行进程各种数据的保存</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="701" transform="matrix(1,0,0,1,616,2349.44)" ed:width="174" ed:parentid="698" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L174,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st12">
            <tspan x="8" style="white-space:pre" y="16">对新的进程各种数据的恢复</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="702" transform="matrix(1,0,0,1,735,2427.56)" ed:width="191" ed:parentid="683" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L191,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">非剥夺调度方式（非抢占式 ）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="703" transform="matrix(1,0,0,1,765,2499.56)" ed:width="161" ed:parentid="683" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L161,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">剥夺调度方式（抢占式）</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="704" transform="matrix(1,0,0,1,484,2474.44)" ed:width="254" ed:parentid="703" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L254,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">可由操作系统剥夺当前进程的CPU使用权</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="705" transform="matrix(1,0,0,1,480,2411.94)" ed:width="228" ed:parentid="702" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L228,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">只能由当前运行的进程主动放弃CPU</tspan>
        </text>
    </g>
    <g ed:height="24.75" id="706" transform="matrix(1,0,0,1,261,2443.19)" ed:width="447" ed:parentid="702" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L447,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">实现简单，系统开销小但无法及时处理紧急任务，适合于早期的批处理系统</tspan>
        </text>
    </g>
    <g ed:height="43.75" id="707" transform="matrix(1,0,0,1,224,2505.69)" ed:width="514" ed:parentid="703" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,43.8L514,43.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">可优先处理更紧急的进程，也可实现让各进程按时间片轮流执行的功能（通过时钟中</tspan>
            <tspan x="8" style="white-space:pre" y="35">断）适用于分时操作系统、实时操作系统</tspan>
        </text>
    </g>
    <g ed:height="131.277" id="708" transform="matrix(1,0,0,1,21,1473.91)" ed:width="274" ed:parentid="666" ed:layout="leftmap">
        <path stroke="#002060" d="M0,131.3L274,131.3" stroke-linejoin="round" fill="none"/>
        <image x="0" preserveAspectRatio="none" transform="translate(7,2.75)" y="0" width="260" xlink:href="进程.html.files/image8.png" height="126"/>
    </g>
    <g ed:height="24.75" id="762" transform="matrix(1,0,0,1,334,1974.44)" ed:width="372" ed:parentid="670" ed:layout="leftmap">
        <path stroke="#435fbc" d="M0,24.8L372,24.8" stroke-linejoin="round" stroke-width="2" fill="none"/>
        <text class="st15">
            <tspan x="8" style="white-space:pre" y="16">常说的cpu调度算法是指这个级别的，比如FCFS、SJF、RR等</tspan>
        </text>
    </g>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Ow0KdmFyIHVhID0gKG11YS5pbmRleE9mKCdydjoxMScpICsgbXVhLmluZGV4T2YoJ01TSUUnKSkgPj0gMDsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmctY29udGFpbmVyJykub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uIChldmVudCkgew0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQp9DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZnLWNvbnRhaW5lcicpLm9ubW91c2Vkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgaWYgKGV2ZW50LndoaWNoID09IDMpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7DQogICAgICAgIHRoaXMub25tb3VzZW1vdmUgPSBmdW5jdGlvbiAoZXYpIHsNCiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnkoLShldi5tb3ZlbWVudFgpLCAwKTsNCiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtKGV2Lm1vdmVtZW50WSkpDQogICAgICAgIH0NCiAgICAgICAgdGhpcy5vbm1vdXNldXAgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmN1cnNvciA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2V1cCA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2Vtb3ZlID0gbnVsbDsNCiAgICAgICAgfQ0KICAgIH0NCn0NCk51bWJlci5wcm90b3R5cGUudG9zdWl0c3ZnID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBudW0gPSB0aGlzLnZhbHVlT2YoKTsNCiAgICBpZiAobnVtICUgMSA9PT0gMCkgew0KICAgICAgICByZXR1cm4gbnVtICsgMC41DQogICAgfSBlbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzeiA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgbnVtID0gdGhpcy52YWx1ZU9mKCk7DQogICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtOw0KfTsNCmZ1bmN0aW9uIHBhcnNlRGF0ZShudW0pIHsNCiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKG51bSk7DQogICAgdmFyIFkgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAnLSc7DQogICAgdmFyIE0gPSAoZGF0ZS5nZXRNb250aCgpICsgMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWSArIE0gKyBEICsgaCArIG1tICsgczsNCn0NCi8vLS1wcmVkZWZpbmVkDQovL2NvbW1lbnQtLQ0KDQpmdW5jdGlvbiBnZXRjd2gocG9wdXApIHsNCiAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgdmFyIHcgPSBwb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaCA9IHBvcHVwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsNCiAgICByZXR1cm4gW3csIGhdDQp9DQpzdmdFbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN2ZyIpOw0KZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAvLyB2YXIgY29tbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdmc6bnRoLWNoaWxkKCcgKyBpbmRleCArICcpIGc+Z1tlZFxcOmNvbW1lbnRdJyk7DQogICAgdmFyIGNvbW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgc3ZnOm50aC1jaGlsZCgke2luZGV4fSkgZz5nW2VkXFw6Y29tbWVudF1gKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgb2xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgY29tbWVudHNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UoY29tbWVudHNbaV0uZ2V0QXR0cmlidXRlKCdlZDpjb21tZW50JykpOw0KICAgICAgICB2YXIgaGVpZ2h0ID0gMDsNCiAgICAgICAgdmFyIGNhcnIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICB2YXIgc3RhbXAgPSBOdW1iZXIoYVtqXS5EYXRlKSAqIDEwMDA7DQogICAgICAgICAgICB2YXIgdGltZSA9IHBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgICAgICB2YXIgbmFtZSA9IGFbal0uTmFtZTsNCiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gYVtqXS5NZXNzYWdlOw0KICAgICAgICAgICAgdmFyIG1lc3NhZ2VBcnIgPSBtZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICAgICAgdmFyIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCd4JywgNSk7DQogICAgICAgICAgICBuLnNldEF0dHJpYnV0ZSgneScsIDEyKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywgJyMwMDZlZmYnKTsNCiAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSBuYW1lICsgJzogJzsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd4JywgMjAwKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd5JywgMTIpOw0KICAgICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzk2OTY5NicpOw0KICAgICAgICAgICAgdC50ZXh0Q29udGVudCA9IHRpbWU7DQogICAgICAgICAgICB0LnNldEF0dHJpYnV0ZSgnZm9udC1zaXplJywgJzEwJyk7DQogICAgICAgICAgICBtLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgyMCwyNyknKTsNCiAgICAgICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzc2FnZUFyci5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIHZhciB0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndHNwYW4nKTsNCiAgICAgICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgICAgIHRzLnNldEF0dHJpYnV0ZSgneScsIGsgKiAxNik7DQogICAgICAgICAgICAgICAgdHMudGV4dENvbnRlbnQgPSBtZXNzYWdlQXJyW2tdOw0KICAgICAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgby5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKTsNCiAgICAgICAgICAgIG8uYXBwZW5kQ2hpbGQobik7DQogICAgICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICAgICAgby5hcHBlbmRDaGlsZChtKTsNCiAgICAgICAgICAgIGNhcnIucHVzaChvKTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICAgICAgaGVpZ2h0ID0gKG1lc3NhZ2VBcnIubGVuZ3RoICsgMSkgKiAxNiArIGhlaWdodDsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgd2FyciA9IGdldGN3aChwb3B1cCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneCcsICcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgIHZhciBvdyA9IHdhcnJbMF0gKyAxMC41Ow0KICAgICAgICB2YXIgb2ggPSB3YXJyWzFdICsgMzsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsIG93KTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBvaCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNjU2NTY1Jyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgdmFyIGwgPSBjYXJyLmxlbmd0aDsNCiAgICAgICAgd2hpbGUgKGwtLSkgew0KICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoY2FycltsXSk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBwb3B1cC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB9Ow0KICAgICAgICB2YXIgY3MgPSBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcyA9IGNvbW1lbnRzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAndHInKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQocHBzWzFdKTsNCiAgICAgICAgICAgIHggPSB4LnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4ICsgJywnICsgeSArICcpJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ21hJykgew0KICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICB2YXIgbWFBcnIgPSBbcGFyc2VGbG9hdChwcHNbMV0pLCBwYXJzZUZsb2F0KHBwc1szXSksIHBhcnNlRmxvYXQocHBzWzVdKSwgcGFyc2VGbG9hdChwcHNbN10pLCBwYXJzZUZsb2F0KHBwc1s5XSksIHBhcnNlRmxvYXQocHBzWzExXSldOw0KICAgICAgICAgICAgaWYgKG1hQXJyWzFdID09IDApIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4MSA9IHgxLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgIHkxID0geTEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB5ID0gcGFyc2VGbG9hdChjc1sxXSk7DQogICAgICAgICAgICAgICAgdmFyIHgyID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgdmFyIGZ4ID0geDEgPCB4MiA/IHgxLnRvc3VpdHN2ZygpIDogeDIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIGZ5ID0geTEgPiB5MiA/IHkxLnRvc3VpdHN2ZygpIDogeTIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyBmeCArICcsJyArIGZ5ICsgJyknOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIG9mZnkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd5JywgKC1vZmZ5KS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCdmaWxsJywgJ3RyYW5zcGFyZW50Jyk7DQogICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIHRyc3RyKTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdjb21tZW50JywgJycpOw0KICAgICAgICBwb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsZXQgY29tbWVudGlkID0gY29tbWVudHNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgY29tbWVudHNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpjb21tZW50aWQnLCBjb21tZW50aWQpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdmVyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBjb21tZW50c1tpXS5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmICghdWEpIHsNCiAgICBmdW5jdGlvbiBnZXR3aChzLCBwKSB7DQogICAgICAgIHZhciBtYWlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBtYWlucC5zdHlsZS5jc3NUZXh0ID0gczsNCiAgICAgICAgbWFpbnAuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5zdHlsZS5tYXhXaWR0aCA9ICc0MDBweCc7DQogICAgICAgIG1haW5wLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICBtYWlucC5pbm5lckhUTUwgPSBwOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1haW5wKTsNCiAgICAgICAgdmFyIHcgPSBtYWlucC5jbGllbnRXaWR0aDsNCiAgICAgICAgdmFyIGggPSBtYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csIGhdDQogICAgfQ0KICAgIHN2Z0VsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnIik7DQogICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgdmFyIG5vdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKSBnPmdbZWRcXDpub3RlXScpOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IG5vdGVzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6bm90ZScpOw0KICAgICAgICAgICAgdmFyIG5vdGVMb2NrID0gbm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlbG9jaycpOw0KICAgICAgICAgICAgaWYgKG5vdGVMb2NrID09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIG1haW5wID0gYS5tYXRjaCgvPGJvZHlbXj5dKj4oLiopPFwvYm9keT4vKVsxXTsNCiAgICAgICAgICAgIHZhciBtYWlucyA9IGEubWF0Y2goL3N0eWxlPSIoLio/KSIvKVsxXTsNCiAgICAgICAgICAgIHZhciBvdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBvbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdmb3JlaWduT2JqZWN0Jyk7DQogICAgICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgaG92ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjY2RjZGZmJyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbm90ZXNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgbm90ZXNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dCA9IG1haW5zOw0KICAgICAgICAgICAgcG9wdXAuaW5uZXJIVE1MID0gbWFpbnA7DQogICAgICAgICAgICB2YXIgd2ggPSBnZXR3aChtYWlucywgbWFpbnApOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHdoWzBdKTsNCiAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgd2hbMV0pOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDgsNCknKTsNCiAgICAgICAgICAgIHBvcHVwLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnOw0KICAgICAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2hbMF0gKyAxNik7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHdoWzFdICsgOCk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjYTI3YTAwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2ZmZTc5ZCcpOw0KICAgICAgICAgICAgb3V0LmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdub3RlJywgJycpOw0KICAgICAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBsZXQgbm90ZWlkID0gbm90ZXNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgbm90ZXNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ2VkOm5vdGVpZCcsIG5vdGVpZCk7DQogICAgICAgICAgICBvdXQub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBvdXQub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbiA/IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVSYW5nZSh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmUpOmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOw0KDQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHZhciBjcyA9IG5vdGVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciBwcyA9IG5vdGVzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgICAgIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ3RyJykgew0KICAgICAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KHBwc1sxXSk7DQogICAgICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICAgICAgdmFyIG1hQXJyID0gW3BhcnNlRmxvYXQocHBzWzFdKSwgcGFyc2VGbG9hdChwcHNbM10pLCBwYXJzZUZsb2F0KHBwc1s1XSksIHBhcnNlRmxvYXQocHBzWzddKSwgcGFyc2VGbG9hdChwcHNbOV0pLCBwYXJzZUZsb2F0KHBwc1sxMV0pXTsNCiAgICAgICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQoY3NbMV0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICAgICAgeDEgPSB4MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgeSA9IHBhcnNlRmxvYXQoY3NbMV0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgICAgIHZhciBmeCA9IHgxIDwgeDIgPyB4MS50b3N1aXRzdmcoKSA6IHgyLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgZnggKyAnLCcgKyBmeSArICcpJzsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgneScsICgtb2ZmeSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChvdXQpOw0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgLy8gdmFyIG5vdGVpZCA9IG5vdGVpZDsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyB2YXIgbm90ZWlkID0gbm90ZWlkOw0KICAgICAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0gZWxzZSB7DQogICAgY29uc29sZS5sb2coJ+aKseatie+8jElF5rWP6KeI5Zmo5LiN5pSv5oyBbm90Zeino+aekO+8jOivt+S9v+eUqOWFtuS7luWGheaguOa1j+iniOWZqOOAguiwouiwou+8gScpDQp9DQovLy0tbm90ZQ0KLy9oeXBlcmxpbmstLQ0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFyciwgYnJyKSB7DQogICAgdmFyIGwgPSAwOw0KICAgIHZhciBsbCA9IDA7DQogICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgaWYgKCFpc05hTihsaW5rYXJyW2pdKSkgew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9ICdQYWdlLScgKyBhcnJbal07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlLnRleHRDb250ZW50ID0gYXJyW2pdOw0KICAgICAgICB9DQogICAgICAgIGUuc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICB2YXIgZXcgPSBlLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQgPSBicnJbal07DQogICAgICAgIGguc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGguc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodyA9IGguZ2V0QkJveCgpLndpZHRoOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5yZW1vdmVDaGlsZChoKTsNCiAgICAgICAgbCA9IGV3ID4gaHcgPyBldyA6IGh3Ow0KICAgICAgICBsbCA9IGwgPiBsbCA/IGwgOiBsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0Kc3ZnRWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdmciKTsNCmZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPD0gc3ZnRWxlbXMubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgbGV0IHN2Z0VsZW0gPSBzdmdFbGVtc1tpbmRleF07DQogICAgbGV0IGxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnOm50aC1jaGlsZCgiICsgaW5kZXggKyAiKSBnPmdbZWRcXDpoeXBlcmxpbmtdIikNCiAgICBjb25zb2xlLmxvZyhsaW5rcyk7DQogICAgLy8gdmFyIGxpbmtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOmh5cGVybGlua10nKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgZGVzY2FyciA9IFtdOw0KICAgICAgICB2YXIgbGlua2FyciA9IFtdOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2NkY2RmZicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywgJzAuNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykpOw0KICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsaW5rc1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgICAgIHZhciBjcyA9IGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHBzID0gbGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpOw0KICAgICAgICBpZiAocHMuc3Vic3RyKDAsIDIpID09ICd0cicpIHsNCiAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIHBhcnNlRmxvYXQocHBzWzBdKTsNCiAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChwcHNbMV0pOw0KICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB5ID0geS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIHggKyAnLCcgKyB5ICsgJyknOw0KICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goLyhcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylcKSQvKTsNCiAgICAgICAgICAgIHZhciBtYUFyciA9IFtwYXJzZUZsb2F0KHBwc1sxXSksIHBhcnNlRmxvYXQocHBzWzNdKSwgcGFyc2VGbG9hdChwcHNbNV0pLCBwYXJzZUZsb2F0KHBwc1s3XSksIHBhcnNlRmxvYXQocHBzWzldKSwgcGFyc2VGbG9hdChwcHNbMTFdKV07DQogICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHgxID0geDEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4MSArICcsJyArIHkxICsgJyknOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHkgPSBwYXJzZUZsb2F0KGNzWzFdKTsNCiAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTIgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB2YXIgZnggPSB4MSA8IHgyID8geDEudG9zdWl0c3ZnKCkgOiB4Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgb2ZmeSA9IE1hdGguYWJzKHkxIC0geTIpOw0KICAgICAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIGZ4ICsgJywnICsgZnkgKyAnKSc7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ3knLCAoLW9mZnkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChwb3B1cFIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHZhciBhbCA9IGEubGVuZ3RoOw0KICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFsOyBqKyspIHsNCiAgICAgICAgICAgIGxpbmthcnIucHVzaChhW2pdLmxpbmspOw0KICAgICAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgIHZhciBtYXggPSBnZXRtYXhsZW4obGlua2FyciwgZGVzY2Fycik7DQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYWw7IGsrKykgew0KICAgICAgICAgICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2EnKTsNCiAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIGlmIChpc05hTihsaW5rYXJyW2tdKSkgew0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInhsaW5rIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgImhyZWYiLCBsaW5rYXJyW2tdKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpOw0KICAgICAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBsaW5rYXJyW2tdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBlLnRleHRDb250ZW50ID0gJ1BhZ2UtJyArIGxpbmthcnJba107DQogICAgICAgICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAieGxpbmsiLCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpOw0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCAiaHJlZiIsICIjIiArIGxpbmthcnJba10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgbWF4ICsgMTApOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICczMycpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjOTk5OTk5Jyk7DQogICAgICAgICAgICBkLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLCAzMyAqIGspOw0KICAgICAgICAgICAgZi50ZXh0Q29udGVudCA9IGRlc2NhcnJba107DQogICAgICAgICAgICBmLnN0eWxlLmZvbnRTaXplID0gJzEycHgnOw0KICAgICAgICAgICAgZi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOw0KICAgICAgICAgICAgZi5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMTIpOw0KICAgICAgICAgICAgZS5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JzsNCiAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMjgpOw0KICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGMuYXBwZW5kQ2hpbGQoZCk7DQogICAgICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICAgICAgYy5hcHBlbmRDaGlsZChlKTsNCiAgICAgICAgICAgIGMub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZmlsbCA9ICcjZTFlMWZmJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGMub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsID0gJ3doaXRlJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGMpOw0KICAgICAgICB9DQogICAgICAgIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywgJycpOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ2VkOmxpbmtpZCcsIGxpbmtzW2ldLnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZCArICIsIiArIGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBwb3B1cC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9ubW91c2VvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzdmctY29udGFpbmVyID4gc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKScpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpsaW5raWQ9JyIgKyBsaW5raWQgKyAiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgLy8gcG9wdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH0NCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIC8vIHZhciBsaW5raWQgPSB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIiArIGxpbmtpZCArICInXVtoeXBlcmxpbmtdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIC8vIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vLS1oeXBlcmxpbmsNCi8vaW5pdGlhbGl6ZS0tDQp2YXIgc2hhcGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9ndG9waWNpZF0nKTsNCnZhciBtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlID0ge307DQp2YXIgZXh0cmFSZWxhID0ge307DQp2YXIgY2hlY2tJRCA9ICcnOw0KZm9yICh2YXIgaSA9IDA7IGkgPCBtSWQubGVuZ3RoOyBpKyspIHsNCiAgICB2YXIgdHlwZSA9IG1JZFtpXS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBzaWQgPSBtSWRbaV0uaWQ7DQogICAgaWYgKHR5cGUgIT09ICdjYWxsb3V0Jykgew0KICAgICAgICBpbml0KHNpZCwgZGF0YVRyZWUpDQogICAgfQ0KfQ0KZnVuY3Rpb24gaW5pdChpZCwgb2JqKSB7DQogICAgdmFyIGNoaWxkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddOm5vdChbZWRcXDp0b3BpY3R5cGVdKSIpOw0KICAgIHZhciBjYWxscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddW2VkXFw6dG9waWN0eXBlXSIpOw0KICAgIHZhciBzdW1tYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nc3VtbWFyeSddIik7DQogICAgdmFyIGJvdW5kYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpmcm9taWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgdmFyIHJlbGF0byA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDp0b2lkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIG9ialsibSIgKyBpZF0gPSB7fTsNCiAgICB2YXIgdHlwZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBpdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6aGVpZ2h0Jyk7DQogICAgaWYgKHR5cGUpIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS50eXBlID0gdHlwZTsNCiAgICB9DQogICAgaWYgKGl3ICYmIGloKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPSBpdzsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5oZWlnaHQgPSBpaDsNCiAgICB9DQogICAgaWYgKHJlbGFmcm9tLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYWZyb20ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBpbmRleGlkID0gcmVsYWZyb21baV0uaWQ7DQogICAgICAgICAgICB2YXIgdG9pZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9pZCcpOw0KICAgICAgICAgICAgaWYgKGV4dHJhUmVsYVtpbmRleGlkXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdID0gew0KICAgICAgICAgICAgICAgICAgICBpZDogaW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDogdG9pZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tW2luZGV4aWRdID0ge307DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tLmRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAocmVsYXRvLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0byA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGF0by5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGluZGV4aWQgPSByZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5kZXhpZCkuZ2V0QXR0cmlidXRlKCdlZDpmcm9taWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogZnJvbWlkLA0KICAgICAgICAgICAgICAgICAgICB0b2lkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0b1tpbmRleGlkXSA9IHt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndXNlJylbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykuc2xpY2UoMSk7DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnRvZ3R5cGUgPSB0b2c7DQogICAgICAgIH0NCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBjaGlsZHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jaGlsZCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGNhbGxzLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmNhbGwgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNhbGxzW2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uY2FsbCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBib3VuZGFyeVtpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoc3VtbWFyeS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5zdW1tYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IHN1bW1hcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5zdW1tYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCi8vLS1pbml0aWFsaXplDQovL3RvZ2dsZWRpc3BsYXktLQ0KdmFyIGNoYWluQXJyID0gW107DQpmdW5jdGlvbiBnZXRjaGFpbihpZCkgew0KICAgIGNoYWluQXJyLnVuc2hpZnQoJ20nICsgaWQpOw0KICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmICghcGFyZW50KSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgaWYgKHBhcmVudC5tYXRjaCgvXCwvKSkgew0KICAgICAgICBwYXJlbnQgPSBwYXJlbnQubWF0Y2goL1xkKyg/PVwsKS8pWzBdDQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFyciA9IFtdOw0KICAgIGdldGNoYWluKGlkKTsNCiAgICB2YXIgbWFpbiA9IGNoYWluQXJyWzBdOw0KICAgIGlmIChjaGFpbkFyci5sZW5ndGggPiAxKSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgLy8gY29uc29sZS5sb2coY2hhaW5BcnIpOw0KICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNoYWluQXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IGNoYWluQXJyW2ldOw0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgdmFyIGNvYmogPSBvYmpbT2JqZWN0LmtleXMob2JqKVtqXV1bYV07DQogICAgICAgICAgICAgICAgaWYgKGNvYmopIHsNCiAgICAgICAgICAgICAgICAgICAgb2JqID0gY29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0gZWxzZSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0NCg0KfQ0KZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7IGkrKykgew0KICAgIHNoYXBlW2ldLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpZCA9IE51bWJlcih0aGlzLmdldEF0dHJpYnV0ZSgnZWQ6dG9ndG9waWNpZCcpKTsNCiAgICAgICAgdmFyIG9iaiA9IGdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGUgPSBvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyA/ICdwbHVzJyA6ICdtaW51cyc7DQogICAgICAgIHZhciBkaXNwbGF5ID0gb2JqLnRvZ3R5cGUgPT09ICdtaW51cycgPyAnbm9uZScgOiAnYmxvY2snOw0KICAgICAgICB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd1c2UnKVswXS5zZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCAnIycgKyB0eXBlKTsNCiAgICAgICAgb2JqLnRvZ3R5cGUgPSB0eXBlOw0KICAgICAgICBjaGVja0lEID0gb2JqOw0KDQogICAgICAgIHV0ZChvYmosIGlkLCBkaXNwbGF5KTsNCiAgICAgICAgZXh0cmFSZWxhRmluKCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gdXRkKG9iaiwgaWQsIHNob3csIG9jKSB7DQoNCiAgICB2YXIgcHNob3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKSB7DQogICAgICAgIGlmIChvYmoucmVsYWZyb20uZGlzcGxheSAhPT0gcHNob3cpIHsNCiAgICAgICAgICAgIHZhciByZWxhZnJvbXMgPSBPYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmoucmVsYWZyb20uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmoucmVsYXRvKSB7DQogICAgICAgIGlmIChvYmoucmVsYXRvLmRpc3BsYXkgIT09IHBzaG93KSB7DQogICAgICAgICAgICB2YXIgcmVsYXRvcyA9IE9iamVjdC5rZXlzKG9iai5yZWxhdG8pOw0KICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZWxhdG9zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0MgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqLnJlbGF0by5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5jYWxsKSB7DQogICAgICAgIHZhciBjYWxscyA9IE9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYgKGNoZWNrSUQgIT09IG9iaikgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBhID0gY2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouY2FsbFtjYWxsc1tpXV07DQogICAgICAgICAgICAgICAgdmFyIGMgPSBiLnRvZ3R5cGU7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20gJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoYi5yZWxhdG8uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3MgPSBPYmplY3Qua2V5cyhiLnJlbGF0byk7DQogICAgICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGF0b3MubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYykgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdtaW51cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsIHx8IGIuYm91bmRhcnkgfHwgYi5zdW1tYXJ5KSAmJiBjID09PSAncGx1cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93LCB0cnVlKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmNhbGwgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnN1bW1hcnkgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouc3VtbWFyeSkgew0KICAgICAgICB2YXIgc3VtbWFyeXMgPSBPYmplY3Qua2V5cyhvYmouc3VtbWFyeSk7DQogICAgICAgIGlmICgoY2hlY2tJRCAhPT0gb2JqICYmIChvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyB8fCAhb2JqLnRvZ3R5cGUpKSB8fCBjaGVja0lEID09PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgYSA9IHN1bW1hcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBvc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5nZXRBdHRyaWJ1dGUoJ2VkOnBhcmVudGlkJyk7DQogICAgICAgICAgICAgICAgaWYgKG9zcC5tYXRjaCgvXCwvKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwYSA9IG9zcC5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwTCA9IDA7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvc3BhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdyA9PSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3NwYVtqXSkuc3R5bGUuZGlzcGxheSAhPSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NwTCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zcEwrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAob3NwTCAhPT0gb3NwYS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhciBiID0gb2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGMpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIithKyInXSIpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYoYz09PSdtaW51cycpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZiAoYi5jYWxsJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouYm91bmRhcnkpIHsNCiAgICAgICAgdmFyIGJvdW5kYXJ5cyA9IE9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmIChjaGVja0lEICE9PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnlzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFyIGEgPSBib3VuZGFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouYm91bmRhcnlbYm91bmRhcnlzW2ldXTsNCiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3cpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGIuY2FsbCYmIWMpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYikubGVuZ3RoICE9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoIW9jICYmIG9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB2YXIgdFNQYXRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigicGF0aFtlZFxcOnRvc3VwZXJpZD0nIiArIGEgKyAiJ10iKTsNCiAgICAgICAgICAgIGlmICh0U1BhdGgpIHsNCiAgICAgICAgICAgICAgICB0U1BhdGguc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgbm90ZVRpcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpub3RldG89JyIgKyBhICsgIiddIik7DQogICAgICAgICAgICBpZiAobm90ZVRpcCkgew0KICAgICAgICAgICAgICAgIG5vdGVUaXAuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGFmcm9tLmRpc3BsYXkgIT09IHNob3cpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICByZWxhZnJvbXMuc3BsaWNlKHJlbGFmcm9tcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGFmcm9tcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0by5kaXNwbGF5ICE9PSBzaG93KSB7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zID0gT2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYXRvcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKChiLmNhbGwgfHwgYi5ib3VuZGFyeSB8fCBiLnN1bW1hcnkpICYmIGMgPT09ICdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdywgdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5jYWxsICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSAmJiAhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBleHRyYVJlbGFGaW4oKSB7DQogICAgdmFyIGV4dHJha2V5cyA9IE9iamVjdC5rZXlzKGV4dHJhUmVsYSk7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRyYWtleXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgdmFyIGV4dHJhT2JqID0gZXh0cmFSZWxhW2V4dHJha2V5c1tpXV07DQogICAgICAgIGlmIChleHRyYU9iai5pc0MgPT09IHRydWUpIHsNCiAgICAgICAgICAgIHZhciBmc2hvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmoudG9pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmouaWQpLnN0eWxlLmRpc3BsYXkgPSBmc2hvdyAmJiB0c2hvdyA/ICdibG9jaycgOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
